使用Moq It.IsAny使用通用Lambda设置Mock用于泛型函数

时间:2015-01-07 15:58:18

标签: c# mocking moq

我试图模仿这个界面:

public interface IManager
{
    TVal GetOrAdd<TVal, TArg>(string key, Func<TArg, TVal> valueFactory, TArg valueFactoryArg) where TVal : class;
}

我正在使用模拟lambda表达式。

var _menagerMock = new Mock<IManager>();
_menagerMock.Setup(x => x.GetOrAdd<string, Tuple<int>>("stringValue",
            It.IsAny<Func<Tuple<int>,string>>, It.IsAny<Tuple<int>>);

It.IsAny&lt; FUNC,串&GT;&GT;没有通过汇编, 错误是:预期带有'string IsAny(Tuple)'签名的方法

有可能嘲笑这种功能吗?

1 个答案:

答案 0 :(得分:4)

尝试:

        var _menagerMock = new Mock<IManager>();
        _menagerMock.Setup(x => x.GetOrAdd("stringValue",
            It.IsAny<Func<Tuple<int>, string>>(), It.IsAny<Tuple<int>>()));

编辑:顺便说一下,It.IsAny()不是测试的最佳实践。您应该设置显式值而不是依赖It.IsAny()。如果您不确定测试中的输入,您如何确定自己获得有效输出?