gpt4 book ai didi

c# - 为什么没有 Times.Always in Moq?

转载 作者:太空狗 更新时间:2023-10-29 21:02:32 26 4
gpt4 key购买 nike

使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com