2009-04-07 2 views
1

В настоящее время у меня есть тест, который тестирует ведущего, которого я имею в модели MVP. На моем презентаторе у меня есть свойство, которое вызовет мой взгляд, который в моем тесте издевается. В инициализации моего теста, после того, как я установил мой просмотр в презентаторе, чтобы быть издеваемым представлением, я установил свое свойство в Presenter, которое вызовет этот метод.Использование Rhino Mocks, почему вызывает издевательство над свойством во время инициализации теста return Ожидаемый вызов # 1, Фактический вызов # 0?

В моем тесте я не имею Expect.Call для метода я взываю, но когда я бег я получаю эту Rhino макета исключение:

Rhino.Mocks.Exceptions.ExpectationViolationException: IView.MethodToInvoke(); Ожидаемый # 1, фактический № 0 ..

Из того, что я понимаю с носорогами Rhino, до тех пор, пока я вызываю Mock вне ожидающего блока, он не должен записывать это. Я бы предположил, что тест пройдет. Есть ли причина, по которой она не проходит?

Ниже приведен код для показа моей установки.

public class Presenter 
{ 
    public IView View; 

    public Presenter(IView view) 
    { 
     View = view 
    } 
    private int _property; 
    public int Property 
    get { return _property;} 
    set 
    { 
     _property = value; 

     View.MethodToInvoke(); 
    } 
} 

... Тест-код Ниже ...

[TestInitialize] 
     public void Initilize() 
     { 
      _mocks = new MockRepository(); 
      _view = _mocks.StrictMock<IView>(); 
      _presenter = new Presenter(_view); 
      _presenter.Property = 1;    
     } 
[TestMethod] 
     public void Test() 
     { 
      Rhino.Mocks.With.Mocks(_mocks).Expecting(delegate 
      {     
      }).Verify(delegate 
      { 
       _presenter.SomeOtherMethod(); 
}); 
     } 

ответ

1

Почему в мире вы хотите протестировать одно и то же при каждом испытании?

Если вы хотите проверить, что происходит какая-то конкретная вещь, вы должны проверить это в одном тесте.

Узор вы используете в настоящее время означает, что вам нужно - создать предпосылки для тестирования - сделать поведение - проверить, что поведение является правильным , а затем повторить, что несколько раз в одном тесте

Вам нужно начать тестирование одной вещи для каждого теста, и это поможет сделать тесты более четкими и упростить использование синтаксиса AAA.

Там в несколько вещей, чтобы обсудить здесь, но это, безусловно, будет понятнее, если вы сделали что-то вроде:

[TestMethod] 
ShouldCallInvokedMethodWhenSettingProperty() 
{ 
    var viewMock = MockRepository.GenerateMock<IView>() 

    var presenter = new Presenter(viewMock); 

    presenter.Property = 1; 

    viewMock.AssertWasCalled(view => view.InvokedMethod()); 

} 

Читать больше на Rhino Mocks 3,5 синтаксис здесь: http://ayende.com/Wiki/Rhino+Mocks+3.5.ashx

0
  1. Что именно вы пытаетесь проверить в методе испытаний?
  2. Вам следует стараться избегать использования строгих издевательств.
  3. Предлагаю использовать Rhino's AAA syntax (Arrange, Act, Assert).
0

Проблема связана с тем, что я не понимаю запись/проверяю, что происходит с Строгими издевательствами. Чтобы исправить проблему, возникшую у меня, это то, как я изменил функцию TestInitilize. Это основано на быстрой проверке моего основного состояния, которое я настраиваю для всех своих тестов.

+0

Опять же, вы уверены, вам нужно строгое издевательство? Ваш сценарий больше похож на обычный макет, который не заставляет вас указывать все ожидания. И если вы используете AAA, гораздо проще его закодировать. –

Смежные вопросы