使用Rhinomocks,如何验证根本没有调用Mock / stub?意思是没有在mock / stub上调用方法?
我知道AssertWasNotCalled方法,但是这个方法要求我提一个方法名。 (也许我有一个可以调用10种不同方法的类。)
Log.AssertWasNotCalled(x => x.LogAndReportException(null, null), x => x.IgnoreArguments());
答案 0 :(得分:6)
你可以使用Strict模拟,虽然这是将来可能会消失的功能:
var mocks = new MockRepository();
var cm = mocks.StrictMock<ICallMonitor>();
cm.Replay();
cm.HangUp(); // this will cause VerifyAllExpectations to throw
cm.VerifyAllExpectations();
在这种语法中,Strict Mock只允许显式定义的调用。
答案 1 :(得分:1)
您可以使用StrictMock
方法创建严格模拟 - 如果使用任何未触发的方法调用,则会失败。根据{{3}},这是不鼓励的,但听起来恰好是它有用的场景。
答案 2 :(得分:1)
当您使用模拟时,您不应断言每次调用是否都有。这会将你的测试与特定的实现结合起来,使它们变得脆弱,并成为重构的噩梦。
如果我碰到这种情况,我会重新考虑为什么我要断言从未使用过依赖。
显然,如果没有在任何地方使用依赖项,只需将其删除即可。如果某些操作需要它,但依赖项中的所有操作都是破坏性操作,并且您希望确保某些操作不会对它们造成伤害,那么您应该明确声明未调用破坏性操作并允许实现执行任何它想要的非破坏性操作(如果有的话)。这使您的测试更加明确,不那么脆弱。