使用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);

最佳答案

听起来您想要“严格”的模拟行为。如果使用非预期参数调用该方法,则测试将失败。

最小起订量是可用的:

var mock = new Mock<IFoo>(MockBehavior.Strict);

(示例取自Moq QuickStart。)

现在,对模拟的每次调用都必须具有一个对应的Setup

使用严格的模拟往往会导致测试变脆。我会避免使用这种技术,或者至少要谨慎使用。

09-06 08:41
查看更多