У вас есть 2 варианта.Если метод должен привести к некоторым изменениям в вашем классе, вы можете вместо этого протестировать результаты вашего метода.Поэтому вы можете вызвать CreateAandB(true,false)
, а затем вызвать другой метод, чтобы проверить, была ли создана правильная вещь.В этой ситуации ваши фиктивные объекты, вероятно, будут заглушками, которые просто предоставляют некоторые данные.
Если doaA
и doaB
- это объекты, которые внедряются в ваш класс и фактически создают данные в БД или аналогичные, чтовы не можете проверить результаты теста, затем вы хотите проверить взаимодействие с ними, и в этом случае вы создаете макеты и устанавливаете ожидания, затем вызываете метод и проверяете, что ожидания удовлетворены.В этой ситуации ваши фиктивные объекты будут имитировать и проверять ожидаемое поведение.
Да, вы тестируете детали реализации, но вы тестируете детали , если ваш метод правильно использует свои зависимости, то, что вы хотите проверить, а не как он использует их, то есть детали, которые вас на самом деле не интересуют.
РЕДАКТИРОВАТЬ
IDao daoA = MockRepository.GenerateMock<IDao>(); //create mock
daoA.Expect(dao=>dao.Create); //set expectation
...
daoA.VerifyExpectations(); //check that the Create method was called
вы можете гарантировать, что ожидания произойдут в определенном порядке, но не использую синтаксис AAA, я полагаю (источник из 2009 , возможно, изменился с тех пор, EDIT см. здесь для опции, которая может работать ), но этоКажется, кто-то разработал подход, который мог бы разрешить это здесь .Я никогда не использовал это и не могу проверить это.
Что касается необходимости знать, какой метод был вызван первым, чтобы вы могли проверить исключение, у вас есть несколько вариантов:
- Получите другое сообщение в вашем исключении и проверьте, чтобы определить, какое исключение было вызвано.
- Ожидайте вызов daoA в дополнение к ожиданию исключения.Если вы не получите вызов daoA, то тест не пройден, поскольку исключение должно быть первым.