最小起订量:我可以验证 setter 只被调用了 N 次吗?
Moq: Can I verify that a setter was only called N times?
我正在测试具有 public setter 但私有 getter 的 属性。
我知道我可以验证 setter 是否使用给定值调用了两次:
mockTable.VerifySet(m => m.CurrentIndex = 0, Times.Once());
mockTable.VerifySet(m => m.CurrentIndex = 1, Times.Once());
但我似乎无法验证 setter 是否被调用了两次。
这可能吗?
谢谢
您可以使用 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,并且不允许其他 values/times。
我不确定我是否理解正确。如果你不需要知道 CurrentIndex 中使用的值,你可以使用这个:
mockTable.VerifySet(m => m.CurrentIndex = It.IsAny<Int32>(), Times.Exactly(2));
但是如果您确实需要验证 CurrentIndex 中的值,则需要按照您已经在做的方式进行操作,或者 for
如果次数太高。
另一个变体:
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));
我正在测试具有 public setter 但私有 getter 的 属性。 我知道我可以验证 setter 是否使用给定值调用了两次:
mockTable.VerifySet(m => m.CurrentIndex = 0, Times.Once());
mockTable.VerifySet(m => m.CurrentIndex = 1, Times.Once());
但我似乎无法验证 setter 是否被调用了两次。
这可能吗?
谢谢
您可以使用 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,并且不允许其他 values/times。
我不确定我是否理解正确。如果你不需要知道 CurrentIndex 中使用的值,你可以使用这个:
mockTable.VerifySet(m => m.CurrentIndex = It.IsAny<Int32>(), Times.Exactly(2));
但是如果您确实需要验证 CurrentIndex 中的值,则需要按照您已经在做的方式进行操作,或者 for
如果次数太高。
另一个变体:
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));