2015-04-02 117 views
4

我该如何断言没有任何一个桩/被嘲弄的对象的方法被调用?对于单一方法来说,它非常简单,只需拨打Stub(x => x.METHOD()).Repeat.Never()即可,但如果您有大量方法或大量重载方法,则会变得不方便。声明没有方法被调用

这是否有一个整洁的解决方法?

+3

你应该可以创建一个没有预期的严格模拟 - 调用它的任何东西都会导致期望违规被抛出。 – Lee 2015-04-02 15:01:01

+0

@Lee - 谢谢,这就是我问了这个问题后真正尝试过的东西,它对我来说是一种魅力。无论如何,如果你想编辑你的回复,以便回复而不是评论,我会接受它 – SOReader 2015-04-15 14:14:43

回答

2

我还没有真正使用rhino-mocks,但正如@Lee在他的评论中所建议的那样,在使用StrictMock之后,您应该能够达到您没有任何其他期望的效果。因此,考虑了以下测试:

public void TestStrickMock() {   
    var mockRepo = new MockRepository(); 

    // Create a StrictMock for the IDummy interface 
    var mock = mockRepo.StrictMock<IDummy>(); 

    // Switch the mode of the mock repo from record to replay 
    mockRepo.ReplayAll(); 

    // Invoke one of the methods on our mocked instance 
    mock.Method1(); 
} 

此测试将失败,因为Method1被调用,当呼叫没有预期已经建立。它与错误失败:

TestStrickMock: Rhino.Mocks.Exceptions.ExpectationViolationException : IDummy.Method1(); Expected #0, Actual #1.

0

正如其他人所说,使用StrictMock

这就过去了。

var mockFoo = MockRepository.GenerateStrictMock<IFoo>(); 
mockFoo.VerifyAllExpectations(); 

这失败了。

var mockFoo = MockRepository.GenerateStrictMock<IFoo>(); 
mockFoo.Bar(); 
mockFoo.VerifyAllExpectations();