使用 Moq,可以使用 Times.Never
验证从不使用某些参数(即满足某些谓词的参数)调用方法.
但是如何验证,无论某个方法被调用多少次,它都总是使用特定参数调用?
默认值似乎是 Times.AtLeastOnce
.
没有Times.Always
.我错过了一些明显的东西吗?谢谢!
编辑:我上周在 Moq 邮件列表中发布了一条建议,但看起来还没有经过审核。我会在这里发布任何更新。
编辑:一个例子。假设我正在测试一个生成 XML 文档的类。我想确保只生成有效的文件。换句话说,测试编写器依赖项是否只给定有效文档和有效序列号来编写。
should_only_write_valid_xml_documents
Mock.Get(this.writer).Verify(
w => w.Write(
It.Is<XDocument>(doc => XsdValidator.IsValid(doc)),
It.Is<int>(n => n < 3)),
Times.Always);
最佳答案
“总是”有多少次? Moq 跟踪使用特定参数调用特定方法的所有时间,然后使用该数字与 Times.Never、Times.AtLeastOnce 等进行比较。
那么,如果一个方法被执行了 4 次并且您将它设置为“Times.Always”,这意味着什么?
Times.Never 会检查以确保数字为零。
Times.AtLeastOnce 会检查数字是否大于或等于 1。
Times.Always 会检查这个数字是……?
您可以确定它应该以编程方式运行的次数,然后执行如下操作:
Times.Exactly(calculatedAmount)
但是 Moq 无法知道“始终”的含义。
关于c# - 为什么没有 Times.Always in Moq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8898118/