加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么没有Times.Always在Moq?

发布时间:2020-12-15 06:33:57 所属栏目:百科 来源:网络整理
导读:使用Moq,可以使用Times.Never验证是否永远不会使用某些参数(即满足某些谓词的参数)调用方法. 但是如何验证,无论一个方法被调用多少次,它总是用某些参数调用? 默认显示为Times.AtLeastOnce. 没有Times.Always.我错过了一些明显的东西吗谢谢! 编辑:上周我向
使用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中可用:

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

(取自Moq QuickStart的例子.)

模拟上的每次调用现在必须具有相应的安装程序.

使用严格的模拟往往会导致脆弱的测试.我会避免使用这种技术,或至少谨慎使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读