Moq:我可以验证一个setter只被调用了N次吗?

时间:2016-01-21 10:17:16

标签: c# .net mocking moq

我正在测试一个拥有公共setter但是私有getter的属性。 我知道我可以验证使用给定值两次调用setter:

html

但我无法做的就是验证设置器被调用了两次。

这可能吗?

由于

3 个答案:

答案 0 :(得分:3)

您可以使用Times.Exactly方法执行此操作:

mockTable.VerifySet(m => m.CurrentIndex = 0, Times.Exactly(N));

<强>更新 我在第一时间错误地指出了你的观点,直到你在评论中澄清它为止。

您可以在测试中编写以下断言:

mockTable.VerifySet(m => m.CurrentIndex = 0, Times.Once);
mockTable.VerifySet(m => m.CurrentIndex = 1, Times.Once);
mockTable.VerifySet(m => m.CurrentIndex = It.IsNotIn(0, 1), Times.Never);

它正在测试你想要的行为:只有当CurrentIndex wat设置正好两次时,测试才会通过:一次为0,另一次为1,不允许其他值/次。

答案 1 :(得分:0)

我不确定我是否正确理解。如果您不需要知道CurrentIndex中使用的值,那么您可以使用它:

mockTable.VerifySet(m => m.CurrentIndex = It.IsAny<Int32>(), Times.Exactly(2));

但是,如果您确实需要验证CurrentIndex中的值,则需要按照您现在的方式进行操作,如果次数过高,则需要for

答案 2 :(得分:0)

另一种变体:

mockTable.VerifySet(m => m.CurrentIndex = 0, Times.Once());
mockTable.VerifySet(m => m.CurrentIndex = 1, Times.Once());
mockTable.VerifySet(m => m.CurrentIndex = It.IsAny<int>(), Times.Exactly(2));