嘲弄通用方法

时间:2010-12-10 11:39:06

标签: c# .net generics moq

假设我有一个通用方法的接口,没有参数:

public interface Interface {
   void Method<T>();
}

现在我希望为这个类实现模拟(我正在使用Moq)并且我希望为某个具体类型模拟这个方法 - 假设我在嘲笑Method<String>()个调用。 / p>

mock = new Mock<Interface>();
mock.Setup(x => x.Method ????).Returns(String("abc"));

????的想法应该清楚 - 这个lambda表达式应该处理TMethod<T>实际上是String的情况。

有什么方法可以达到想要的行为吗?

2 个答案:

答案 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返回类型,因此它不应返回任何内容......