接口上的moq泛型方法设置

时间:2016-04-29 23:50:23

标签: c# unit-testing moq

如何在C#中使用moq库设置通用方法

Interface IA
{
    void foo();
    void Get<T>();
}

[Fact]
public void SetupGenericMethod()
{
    var mock = new Mock<IA>();
    mock.Setup(x=> x.Get<It.IsAny<???>()>()
}

对此问题的任何帮助都非常感谢。非常感谢你的时间

2 个答案:

答案 0 :(得分:0)

测试时,您应该知道测试应该是T。使用类型进行设置。同样基于示例中的命名Get<T>应返回一些内容。

Interface IA
{
    void foo();
    T Get<T>();
}

[Fact]
public void SetupGenericMethod()
{
    var mockT = new Mock<FakeType>(); 
    var mock = new Mock<IA>();
    mock.Setup(x=> x.Get<FakeType>()).Returns(mockT.Object);
}

如果您确实在寻找Mocking generic method call for any given type parameter。那么这个问题的答案是放弃创建一个模拟,而是使用Stub,或者自己模拟界面而不是使用模拟框架。

答案 1 :(得分:0)

如果不需要执行与类型__HOST相关的操作,可以从Moq 4.13(2019-09-01)起使用通用类型参数T:< / p>

It.IsAnyType

完整示例:

mock.Setup(x => x.Get<It.IsAnyType>())