我正在尝试以编程方式从Enterprise Architect模型中提取信息(保存在XMI文件中) - 我需要它来生成一些报告,但我不想创建EA加载项.在任何地方都有C#XMI解析器库吗?
我当然可以从其XML模式生成XMI解析代码,但这将是我的第二个选择.
我试图通过a来处理泛型方法的调用RealProxy,但我似乎无法找到有关截获的方法调用中使用的泛型参数的实际类型的信息.代码的摘录:
public override IMessage Invoke(IMessage msg)
{
...
string methodName = (string)msg.Properties["__MethodName"];
Type[] parameterTypes = (Type[])msg.Properties["__MethodSignature"];
object[] args = (object[])msg.Properties["__Args"];
MethodInfo method = typeToProxy.GetMethod(methodName, parameterTypes);
...
Run Code Online (Sandbox Code Playgroud)
假设我代理了一个类似的界面
interface IFactory
{
TService Create<TService>()
}
Run Code Online (Sandbox Code Playgroud)
当我打电话给代理
proxied.Create<MyClass>()
Run Code Online (Sandbox Code Playgroud)
我希望能够找出泛型参数的类型MyClass.这可能通过RealProxy吗?
代码
Assert.AreEqual (9.97320998018748d, observerPosition.CenterLongitude);
Run Code Online (Sandbox Code Playgroud)
产生
Expected Value & Actual Value : 9.97320998018748
Remark : Both values look the same when formatted but they
are distinct instances.
Run Code Online (Sandbox Code Playgroud)
在MbUnit 3.0中比较两个双打同等的最优雅的方法是什么?我知道我可以自己围绕它们,但是有一些MbUnit构造吗?
更新:我认为我目前的"解决方法"不优雅:
Assert.LessThan(
Math.Abs(9.97320998018748d - observerPosition.CenterLongitude),
0.0000001);
Run Code Online (Sandbox Code Playgroud) 当您在构造函数中指定新参数时,Resharper 提供了非常有用的引入和初始化字段 xxx操作,例如:
Constructor (int parameter)
Run Code Online (Sandbox Code Playgroud)
唯一的(小)麻烦是它将新领域放在课程的开头 - 我喜欢将私人部位尽可能远离陌生人的窥视;)。
但是,如果类中已经有一些私有字段,Resharper 会“正确”地将新字段放在这些字段旁边(注意引号,我不想在这个问题上引发激烈的争论),即使它们是在课程结束时。
有没有办法强制 Resharper始终将新字段放在课程末尾?
更新:好的,我忘了提及我了解“选项中的类型成员布局”功能,但是有关如何修改模板以实现字段放置的一些具体帮助会很好。
我有一个带加权边的有向图(权重都是正数).
现在,我正在寻找一种有效的算法或代码(特别是C#)来找到两个给定顶点之间的最长路径.
我正在通过IronPython为我的C#mapmaking应用程序提供可扩展性机制.一切正常,但我有一个特定的要求,我无法实现:我希望用户能够指定两件事:
getTextLabel(element))这两个设置必须是分开的,但我不知道是否可以使用PythonScript相关类来完成此操作.
我是Python的新手,或许有另一种方法可以实现这一目标?出于性能原因,我想避免多次加载和编译Python脚本文件(因为可能存在上面提到的几个不同的"函数调用"设置,CompiledCode如果可能的话我想重用该文件的实例).
更新:@digEmAll给出了我的问题的正确答案,所以我接受它作为一个有效的答案.但如果你关心表现,你也应该看看我自己的答案.
我有一个我想要测试的逻辑,它使用依赖注入接口和一个(或多个)void方法,例如:
interface IMyService
{
void MethodA (MyComplexObject arg1, int arg2);
}
Run Code Online (Sandbox Code Playgroud)
我想是创建一个存根为此IMyService,将刚刚记录的方法调用MethodA,我会以后还可以访问它作为一个列表,像:
MyComplexObject actualParameter = serviceRecorder
.GetMethodRecordings("MethodA").GetRecord(10).GetInputParameter(0);
Run Code Online (Sandbox Code Playgroud)
我需要这个来检查某个调用的这个参数的内容并对其进行断言.我知道还有其他的做法(比如设置带有约束的期望调用),但是当你有大量的调用并且你只想在第51个调用时,这似乎更容易编写,例如.
那么在Rhino.Mocks中是否存在某种机制,或者我留给自己的设备(IMyService用记录功能编写虚拟实现)?
注意:(我知道这可能会导致测试变得脆弱,我知道后果).
更新:这是我到目前为止所发现的(部分归功于Mark帮助将此模式命名为Test Spy):
System.IO.Path在.NET中,使用它是非常笨拙的.在我的各种项目中,我遇到保持其要求使用重复的,繁琐,因而容易出错的代码片段相同的使用场景Path.Combine,Path.GetFileName,Path.GetDirectoryName,String.Format,等场景,如:
Package{0}.zip")\(因为它们不适用于Mono上的Linux)在开始编写我自己的PathBuilder类或类似的东西之前:C#中有这样一个好的(并且经过验证的)开源实现吗?
更新:好的,只是说明我的意思:
string zipFileName = Path.GetFileNameWithoutExtension(directoryName) + ".zip";
zipFileName = Path.Combine(
Path.GetDirectoryName(directoryName),
zipFileName);
Run Code Online (Sandbox Code Playgroud)
一个更好的流畅API可能如下所示:
Path2 directoryName = "something";
Path2 zipFileName = directoryName.Extension("zip");
Run Code Online (Sandbox Code Playgroud)
或者在构建路径时:
Path2 directoryName = "something";
Path2 directory2 = directoryName.Add("subdirectory")
.Add("Temp").Add("myzip.zip");
Run Code Online (Sandbox Code Playgroud)
代替
string directory2 = Path.Combine(Path.Combine(Path.Combine(
directoryName, "subdirectory"), "Temp"), "myzip.zip");
Run Code Online (Sandbox Code Playgroud)
我实际上在过去实现了类似的东西,但是在一个单独的项目中.我现在决定将它重新用作一个独立的C#类,在我的其他项目中在VisualStudio中添加"as link".这不是一个最干净的解决方案,但我想它会做到.如果您有兴趣,可以在这里查看代码.
我正在编写一些单元测试来声明我们所有的控制器操作方法都标有适当的自定义属性,但我真的不知道用于确定公共方法是否可以充当MVC操作的标准.
我认为标准可以是返回值类型(它必须是ActionResult或衍生的).这是真的?静态方法怎么样?
c# ×7
.net ×2
algorithm ×1
asp.net-mvc ×1
coding-style ×1
gallio ×1
generics ×1
ironpython ×1
mbunit ×1
mocking ×1
parsing ×1
path ×1
realproxy ×1
reflection ×1
resharper ×1
rhino-mocks ×1
richtextbox ×1
winforms ×1
xmi ×1