[英]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.