如何根据 Moq 方法设置中的参数值 return 两个不同的值?

How to return two different values depending on the argument values in Moq method setup?

我有一个测试,在某个时候比较两个列表。

IsEqual(List<string> a, List<string> b, ComparisonConfig conf)

如果列表 A 等于列表 B,则上述函数 returns true 结果 false 否则结果。

在测试中,我需要设置此函数,以便在调用时 return 得到正确的结果。

_service
    .Setup(x => x.IsEqual(It.IsAny<List<string>>(), It.IsAny<List<string>>(), null))
    .Returns(Result.Ok(true));

现在这总是 return 正确,即使列表不相等。

所以问题是当参数相等时如何设置returnResult.Ok(true),否则Result.Ok(false)

Returns 有几个重载接受具有不同数量参数的 Func,因此可以在 returning 值时访问调用参数:

_service.Setup(x => x.IsEqual(It.IsAny<List<string>>(), It.IsAny<List<string>>(), null))
    .Returns((List<string> l1, List<string> l2, ComparisonConfig c) => 
    {
        if(...) // some logic with l1 and l2
        {
            return Result.Ok(true);
        }
        return Result.Ok(false);
    });

Returns 使用的委托应与正在设置的成员的签名和 return 类型相匹配。