Nmock2 и ожидания событий - PullRequest
1 голос
/ 11 марта 2010

Я нахожусь в процессе написания теста для небольшого приложения, которое следует шаблону MVP.

Технически, я знаю, что должен был написать тест до написания кода, но мне нужно было быстро и эффективно запустить демонстрационное приложение, и теперь я возвращаюсь к тесту, прежде чем перейти к реальной разработке.

Короче говоря, я пытаюсь протестировать докладчика, однако я даже не могу запустить пустой тест из-за исключительной ситуации Internal.ExpectationException.

Исключение возникает при неожиданном вызове назначения события.

Вот класс ведущего,

   public LBCPresenter(IView view, IModel model)
   {
        m_model = model;

        m_model.BatteryModifiedEvent += new EventHandler(m_model_BatteryModifiedEvent);
   }

Интерфейс модели

    public interface IModel
    {
         event EventHandler BatteryModifiedEvent;
    }

А вот тестовый класс, я не вижу, что мне не хватает, я сказал NMock ожидать события ...

    [TestFixture]
public class MVP_PresenterTester
{
    private Mockery mocks;
    private IView _mockView;
    private IViewObserver _Presenter;
    private IModel _mockModel;

    [SetUp]
    public void SetUp()
    {
        mocks = new Mockery();

        _mockView = mocks.NewMock<IView>();
        _mockModel = mocks.NewMock<IModel>();
        _Presenter = new LBCPresenter(_mockView, _mockModel);

    }

    [Test]
    public void TestClosingFormWhenNotDirty()
    {
         Expect.Once.On(_mockModel).EventAdd("BatteryModifiedEvent", NMock2.Is.Anything);

       //makes no difference if following line is commented out or not
       //mocks.VerifyAllExpectationsHaveBeenMet();
    }
}

Каждый раз, когда я запускаю тест, я получаю одно и то же исключение для ожидания.

Есть идеи?

1 Ответ

1 голос
/ 27 апреля 2010

Я думаю, что это проблема синхронизации - вы вызываете конструктор презентатора в настройках теста - это означает, что добавление события происходит до того, как ваш тест установит ожидание EventAdd.

Если вы переместите свой вызов в конструктор презентатора ниже исключения EventAdd, оно должно работать

...