假设我有一个通用方法的接口,没有参数:
public interface Interface {
void Method<T>();
}
现在我希望为这个类实现模拟(我正在使用Moq
)并且我希望为某个具体类型模拟这个方法 - 假设我在嘲笑Method<String>()
个调用。 / p>
mock = new Mock<Interface>();
mock.Setup(x => x.Method ????).Returns(String("abc"));
????
的想法应该清楚 - 这个lambda表达式应该处理T
中Method<T>
实际上是String
的情况。
有什么方法可以达到想要的行为吗?
答案 0 :(得分:20)
简单地:
mock.Setup(x => x.Method<string>()).Returns("abc");
还要确保您的方法实际返回的内容为当前返回类型定义为void
:
public interface Interface
{
string Method<T>();
}
class Program
{
static void Main()
{
var mock = new Mock<Interface>();
mock.Setup(x => x.Method<string>()).Returns("abc");
Console.WriteLine(mock.Object.Method<string>()); // prints abc
Console.WriteLine(mock.Object.Method<int>()); // prints nothing
}
}
答案 1 :(得分:5)
我自己没有使用过Moq,但我希望:
mock.Setup(x => x.Method<string>());
(请注意,您的示例方法具有void返回类型,因此它不应返回任何内容......