到目前为止,检查Moq Call参数



我有一个包含的接口

string Foobar(string one, string two, string three = null, string four = null);

我已经将moq设置为这样的

var inputType1 = It.is<string>(x=>x=="1111");
var moqedInterface = new Mock<SomeInterface>();
moqedInterface
.setup(x=>x.Foobar(inputType1,null,null,null)
.returns("hiya");

然后我打电话给

string result = moqedInterface.Foobar("1111", null); //no optional parameters used

在实践中,这个接口通常在没有可选参数的情况下被调用,测试应该考虑并反映这种使用。为了准确性和可读性。

但当我试图验证或检查的结果时

Assert.NotNull(result); //fails
moqedInterface
.Verify(x=>x.Foobar(It.is<string>(x=>x=="1111"), null, null, null),Times.Once); //fails

而我怀疑Mock<>可以将可选参数默认为非null值,如空字符串。我对此无法证实。虽然我可以在试验的基础上测试这个特定的理论和任何其他理论,但我没有办法简单地检查发送的内容。

由于Moq将输入参数存储在某个地方以供稍后验证,我应该能够查看对象中的某个地方来检查到目前为止发送的内容,对吗?在Moq对象中,我可以在哪里查找调试时迄今为止调用过的参数?

此外,Moq在可选参数上的默认行为是什么?参数是否仍然默认为其预期值,或者Moq是否还不支持此功能?

我想我可以在检查员那里找到它,但经过一番查找,我没有看到。

虽然问题和情况不同

我在这里找到了答案:

从匿名函数调用It.Is…((时,为什么Moq设置/验证匹配器失败

。。。测试失败,因为It.IsAny方法已在匹配器工厂外进行了评估。因此,您有一个0的MemberAccess表达式。

Moq将正确实现默认的可选参数,而真正的问题是It.is<>必须在设置功能中使用。

所以不是

var inputType1 = It.is<string>(x=>x=="1111"); 
//bad. evaluated outside of the MatcherFactory
moqedInterface
.setup(x=>x.Foobar(inputType1,null,null,null)
.returns("hiya");

这将适用于

moqedInterface
.setup(x=>x.Foobar(It.is<string>(x=>x=="1111"),null,null,null)
.returns("hiya");

此外,检查Mock中迄今为止发送的参数。你应该可以在这里查看:

moqedInterface.Invocations

然而,我的特定版本的Moq在检查员中没有这个字段。

最新更新