尝试将Mock <t>用于泛型类型</t>时Moq的奇怪问题

时间:2011-10-05 15:08:46

标签: c# moq

一些代码:

public interface IMyInterface
{
    int GetIt();
}

public class MyImplementation : IMyInterface
{
    public int GetIt()
    {
        return 10;
    }
}

   [Test]
    public void Testit()
    {
        Method<MyImplementation>();
    }

    private void Method<T>()
        where T : class , IMyInterface
    {
        var mock = new Mock<T>();
        mock.Setup(m => m.GetIt()).Returns(() =>
                                               {
                                                   return 40;
                                               });

        Assert.AreEqual(40, mock.Object.GetIt());
    }

请注意,在新建Mock时我使用的是泛型T,但由于T被限制为引用类型且类型为IMyInterface,因此我可以设置方法没问题。但由于某些原因,它总是失败,并且调用MyImplementation的实际实现而不是Mocked实现。

1 个答案:

答案 0 :(得分:4)

你实际上是在嘲弄一个类方法,因此该方法必须是虚拟的。

尝试

public class MyImplementation : IMyInterface
{
    public virtual int GetIt()
    {
        return 10;
    }
}