У меня проблемы с тестированием этого сценария.
Счет имеет два состояния - законченное и незаконченное - и я хочу проверить, что метод Presenter.FinishInvoice () вызывает DAO.FinishInvoice (), затем вызывает DAO.GetInvoice (), а затем устанавливает View.Invoice срезультат.Проблема в том, что мне нужно вызвать DAO.GetInvoice (), чтобы сначала закончить счет, и это вызывается из Presenter.InitializeView () (проверено в другом тесте).
Вот мой тест:
using (mocks.Record())
{
SetupResult.For(view.Invoice).PropertyBehavior();
SetupResult.For(DAO.GetInvoice(1)).Return(invoice);
Expect.Call(DAO.FinishInvoice(1)).Return(true);
Expect.Call(DAO.GetInvoice(1)).Return(invoice);
}
using (mocks.Playback())
{
Presenter presenter = new Presenter(view, DAO);
presenter.InitializeView(1);
presenter.FinishInvoice();
}
Будет вызван DAO.GetInvoice (), а View.Invoice будет установлен один раз при вызове InitializeView ().Это не часть теста, но FinishInvoice () завершится ошибкой, если я не установлю View.Invoice на незавершенный счет, поэтому необходимо установить возвращаемое значение.
Второй вызов DAO.GetInvoice () вызывается из FinishInvoice (), и является частью теста.
Если я запускаю этот тест, я получаю ошибку приDAO.GetInvoice (1);Ожидаемый # 1, фактический # 0.Я прошел через код, и он вызывает DAO.GetInvoice (), когда вызывается FinishInvoice (), так что это должен быть мой тестовый код, который неисправен, а не мой код докладчика.
Если я изменю:
SetupResult.For(DAO.GetInvoice(1)).Return(invoice);
до:
Expect.Call(DAO.GetInvoice(1)).Return(invoice);
это работает, но это не должно быть частью теста, поскольку это просто необходимо для настройки (но не может быть помещено в метод SetUp какэто не требуется для всех тестов)
Я полагаю, что это не катастрофа, что мне нужно сделать это с Expect.Call (), но я хотел бы узнать, как настроить его так, как я хочу, чтобы оно было.