使用Moq进行单元测试动态调度

时间:2014-05-13 08:22:29

标签: c# dynamic moq dispatch

我正在使用动态调度工作。在用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工作吗?如何在没有铸造的情况下对动态调度进行单元测试? (在代码中是不可能的...因此我们使用动态调度的原因)

谢谢

1 个答案:

答案 0 :(得分:1)

为什么要致电dispatch(t.Object);,您应该致电dispatch(t);

dynamic只是一种关闭类型检查器的方法。