一些代码:
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实现。
答案 0 :(得分:4)
你实际上是在嘲弄一个类方法,因此该方法必须是虚拟的。
尝试
public class MyImplementation : IMyInterface
{
public virtual int GetIt()
{
return 10;
}
}