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

Mat*_*lov 5 c# moq mocking

我正在尝试模拟此界面:

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

我正在使用 isuse 来模拟 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>>);
Run Code Online (Sandbox Code Playgroud)

It.IsAny< Func,string>> 未通过编译,错误为:预期有一个带有 'string IsAny(Tuple)' 签名的方法

是否可以模拟这种功能?

C B*_*uer 4

尝试:

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

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