2015-04-02 252 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();