- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
几天来我一直试图解决这个问题,但无济于事。我正在尝试测试 AnObject.AnAction 的功能(先发制人的道歉,我必须混淆类/方法名称。)我的目标是防止 MyTestObj.do_work(AnObject) 在被调用时实际执行任何操作。它包含我确实希望在单元测试环境中调用的代码。
这是我的单元测试代码:
Mock< MyTestObj > myTestObj_mock = new Mock< MyTestObj > ();
myTestObj_mock.Setup( e => e.do_work( It.IsAny< AnObject > () ) );
...
AnObject tester = new AnObject();
tester.anAction( myTestObj_mock.Object );
在方法 AnObject.AnAction( MyTestObj mto ) 中:
...
mto.do_work( this );
...
正是在这个时候,我得到了这个错误:
System.InvalidCastException : Unable to cast object of type
'myNamespace.AnObject' to type 'System.Delegate'.
MyTestObj.do_work 是一个虚方法。
我完全不知道为什么会出现此错误。当 NUnit 运行它时,我已经逐步检查了代码,我确信那是它崩溃的地方。它不会进一步深入代码。
我真的很难过。有人知道发生了什么事吗?
提前致谢!
***更新***
我试图在 AnObject.AnAction 中创建一个 AnObject 实例并传递它而不是“this”:
...
AnObject test = new AnObject();
mto.do_work( test );
...
这没有任何效果。
最佳答案
由于您的问题已写好,因此您无需设置 myTestObj_mock.do_work()。
Setup 用于表示,当调用方法 X 时返回值 Y。或者换句话说,当调用方法 X 时,返回异常 Z。问问自己,这真的是我需要做的吗?
这里你没有从方法返回任何东西:
mto.do_work( this );
此外,这里:
myTestObj_mock.Setup( e => e.do_work( It.IsAny< AnObject > () ) );
您没有为您的设置定义任何返回。
在这种情况下,您应该能够提供模拟 myTestObj_mock 而无需定义设置。只需删除带有 Setup 的行并再次运行测试。
一个猜测:
如果您定义 Setup 是因为您希望您的测试确保 AnObject.AnAction 确实调用了 do_work 方法,那么您需要做的是定义一个 Verify 方法而不是 Setup,同样:
mock.Verify(foo => foo.Execute("ping"));
或者在你的情况下是这样的
myTestObj_mock.Verify(m => m.do_work(It.IsAny< AnObject > ()), Times.AtLeastOnce());
另一个猜测:
如果您定义模拟是因为您传递了“this”引用并期望 do_work 修改“this”的某些参数以使测试通过,那么您不应该在这里进行模拟。请记住,模拟并不是您的对象的真正实例,因此永远不会调用修改 this 引用的代码。
关于c# - 最小起订量错误 : Cannot cast 'AnObject' to 'System.Delegate' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9691595/
我是一名优秀的程序员,十分优秀!