2015-04-02 3 views
4

Как утверждать, что ни один из методов обрезанного/издевающегося объекта не был вызван? Для одного метода это довольно просто, просто позвоните Stub(x => x.METHOD()).Repeat.Never(), но если у вас есть множество методов или много перегруженных методов, это становится неудобным.Утверждение о методах не было вызвано

Есть ли опрятный обходной путь для этого?

+3

Вы должны иметь возможность создать строгий макет без каких-либо ожиданий - при вызове чего-либо на нем будет вызвано нарушение ожидания. – Lee

+0

@ Lee - спасибо, вот что я на самом деле пробовал сразу после вопроса, и это сработало как прелесть для меня. В любом случае, если вы хотите отредактировать свой ответ, чтобы он отображался как ответ, а не комментарий, я бы принял его тогда – SOReader

ответ

2

Я действительно не использовал носорогов, но как @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(); 
Смежные вопросы