【发布时间】:2018-08-07 21:06:47
【问题描述】:
我的界面包含
string Foobar(string one, string two, string three = null, string four = null);
我已经设置了起订量
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 可能会将可选参数默认为非空值,例如空字符串。我没有对此进行验证。 虽然我可以在试验的基础上测试该特定理论和任何其他理论,但我无法简单地检查发送的内容。
由于 Moq 将输入参数存储在某处以供以后验证,我应该能够查看对象中的某处以检查到目前为止发送的内容,对吗?我可以在 Moq 对象中的哪个位置查找到目前为止在调试时调用它的参数?
此外,Moq 在可选参数上的默认行为是什么?参数是否仍会默认为其预期值,或者 Moq 还不支持此功能?
我会假设我可以在检查器中找到它,但经过一番查看后我没有看到它。
【问题讨论】:
标签: c# unit-testing moq optional-parameters