c# - 使用 Moq It.IsAny 使用通用 Lambda 为通用函数设置 Mock

标签 c# mocking moq

我正在尝试模拟这个接口(interface):

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

我正在使用 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>>);

It.IsAny< Func,string>> 没有通过编译, 错误是:Expected a method with 'string IsAny(Tuple)' signature

是否可以模拟这种功能?

最佳答案

尝试:

        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()。如果您不能真正确定测试中的输入,您如何确定得到有效的输出?

关于c# - 使用 Moq It.IsAny 使用通用 Lambda 为通用函数设置 Mock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823378/

相关文章:

javascript - 使用 Jest 模拟依赖项中的依赖项?

java - 如何在构造函数内模拟实例?

c# - 如何将最小起订量与 Xamarin.Forms DependencyService 结合使用

c# - 使用 Lambda 表达式验证方法调用 - Moq

c# - 如何生成彩色图像的直方图?

c# - RegularExpressionAttribute 不使用表达式来测试点 (\.)

php - 好的PHP模拟框架

c# - Moq & EF6 - 模拟 EF6 Remove 方法不删除对象

c# - MongoDB C# 驱动程序超时

C# 更改 dll.config 中的值在运行时不会更改