我正在使用动态调度工作。在用Moq对我的一些方法进行单元测试时,我偶然发现了一些我不明白的事情。
我尝试在下面的测试中重现它:
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Mock<Test> _m = new Mock<Test>();
//if i do
//dispatch(_m.Object); //this line causes Exception
//Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:
//'Castle.Proxies.TestProxy' doesn't contain définition for 'Object'
//but if i do
Test ts = _m.Object;
dispatch(ts); //this line works fine
//verify
_m.Verify(m => m.Display(), Times.Once());
}
public void dispatch(Test p)
{
p.Display();
}
}
public interface Test
{
void Display();
}
}
有人可以解释一下为什么没有演员才能在Test
工作吗?如何在没有铸造的情况下对动态调度进行单元测试? (在代码中是不可能的...因此我们使用动态调度的原因)
谢谢
答案 0 :(得分:1)
为什么要致电dispatch(t.Object);
,您应该致电dispatch(t);
dynamic
只是一种关闭类型检查器的方法。