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

标签 c# unit-testing moq

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

相关文章:

c# - 我应该如何将托管的 DirectX 程序迁移到 Windows 7?

c# - 将 web.config 作为第三方 Web 服务提供商分发的正确方法

unit-testing - 单元测试: allow for false-positive or bring duplication

c# - 为什么 Encoding.Default.GetBytes() 在 VB.NET 和 C# 中返回不同的结果?

c# - 将用户输入返回到未定义的数组中?

objective-c - 从 Swift 测试文件调用 Objective-C 类

java - 基于其他方法返回类型的单元测试 boolean 方法

c# - Moq设置方法返回值

c#-4.0 - 如何模拟 MongoDB 对象来测试我的数据模型?

c# - 如何使用 Moq 验证字符串数组中的值是否已设置