繁体   English   中英

Moq,在Verify(()中求一个布尔表达式

[英]Moq, evaluate a boolean expression in Verify(()

好的,我想学习一些有关Moq的知识,这使我感到困惑。

我可以设置一个verify方法来检查某个方法是否已被调用,并且它可以完美地工作。 但我想尝试其他方法:

所以,这很好:

mockNoteContext.Verify(ctx => ctx.SaveChanges(), Times.Once);

但是我尝试扩展一下以进行更多检查:

mockNoteContext.Verify(ctx => ctx.Notes.Count() == 1);

不起作用,所以我开始玩了一下,并得到以下信息:

Expression<Func<NoteContext, bool>> expr = ctx => ctx.Notes.Count() == 1;
mockNoteContext.Verify(It.Is<Expression<Func<NoteContext, bool>>>(e => e == expr));

这只是给出一个空值异常。 但是我不明白为什么。 可能它不知道如何处理“ e”? 所有这些都很难启动。 如何正确设置?

我当然知道我可以读:

var noteCount = mockNoteContext.Object.Notes.Count();

并断言,但我只是很好奇如何利用Verify来为我处理:)

欢迎任何帮助!

那不是使用Verify调用的方法。 它用于验证是否调用了模拟对象。 不主张价值。

查看文档https://github.com/Moq/moq4/wiki/Quickstart#verification

您在问题末尾所建议的是建议的主张价值的方式。

var expected = 1;
var noteCount = mockNoteContext.Object.Notes.Count();
Assert.AreEqual(expected, noteCount);

参考Moq快速入门 ,以更好地了解如何使用模拟框架。

还有一些专门用于断言的库。

这样的库之一就是Fluent Assertions

Fluent断言是一组.NET扩展方法,使您可以更自然地指定单元测试的预期结果。

例如

var expected = 1;
var noteCount = mockNoteContext.Object.Notes.Count();
noteCount.Should().Be(expected); //<-- fluent assertion

这两个库可以一起使用,以在测试时提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM