最佳答案
我有一个带有如下方法的接口:
public interface IRepo
{
IA<T> Reserve<T>();
}
我想模拟包含此方法的类,而不必为它可用于的每个类型指定安装方法。理想情况下,我只希望它返回一个 new mock<T>.Object
。
我该怎么做呢?
看来我的解释不够清楚。这里有一个例子-这是可能的,现在,当我指定的 T (这里,字符串) :
[TestMethod]
public void ExampleTest()
{
var mock = new Mock<IRepo>();
mock.Setup(pa => pa.Reserve<string>()).Returns(new Mock<IA<string>>().Object);
}
我想达到的目标是这样的:
[TestMethod]
public void ExampleTest()
{
var mock = new Mock<IRepo>();
mock.Setup(pa => pa.Reserve<T>()).Returns(new Mock<IA<T>>().Object);
// of course T doesn't exist here. But I would like to specify all types
// without having to repeat the .Setup(...) line for each of them.
}
被测试对象的某些方法可能会调用 reserve 以支持三种或四种不同的类型。如果我必须设置所有的类型,我必须为每个测试编写大量的设置代码。但是在一个单独的测试中,我并不关心所有的对象,我只需要非空的模拟对象,除了我实际测试的对象(我很高兴为其编写了更复杂的设置)。