Хорошо, я знаю, что было много путаницы в отношении нового синтаксиса AAA в Rhino Mocks, но я должен быть честным, от того, что я видел до сих пор, мне нравится. Он читает лучше и сохраняет некоторые нажатия клавиш.
В основном, я тестирую ListController
, который будет в основном отвечать за некоторые списки вещей:) Я создал интерфейс, который в конечном итоге станет DAL, и это, конечно же, сейчас зашито.
У меня был следующий код:
(manager
- тестируемая система, data
- это интерфейс с заглушенными данными)
[Fact]
public void list_count_queries_data()
{
data.Expect(x => x.ListCount(1));
manager.ListCount();
data.VerifyAllExpectations();
}
Основная цель этого теста - просто убедиться, что менеджер фактически запрашивает DAL. Обратите внимание, что DAL на самом деле даже не существует, поэтому нет "реального" значения, возвращающегося назад.
Однако это не работает, так как мне нужно изменить ожидание, чтобы иметь возвращаемое значение, например:
data.Expect(x => x.ListCount(1)).Return(1);
Это будет работать нормально, и тест пройдет, однако. Меня смущает то, что в этот момент возвращаемое значение означает ничего. Я могу изменить его на 100, 50, 42, независимо от того, и тест всегда будет проходить?
Это заставляет меня нервничать, потому что тест должен быть явным и должен полностью терпеть неудачу, если ожидаемые условия не будут удовлетворены правильно?
Если я изменю тест на ( "1" - это ожидаемый идентификатор, с которым связан счетчик):
[Fact]
public void list_count_queries_data()
{
manager.ListCount();
data.AssertWasCalled(x => x.ListCount(1));
}
Все проходит отлично, и если я переключу тест на него головой на AssertWasNotCalled
, он терпит неудачу, как ожидалось. Я также думаю, что он читает намного лучше, яснее о том, что тестируется и, самое главное, ПРОПУСКАЕТ И НЕИСПРАВНОСТИ как ожидалось!
Итак, Я что-то пропустил в первом примере кода?. Каковы ваши мысли по поводу утверждений о заглушках? (было интересное обсуждение здесь, мне лично понравился этот ответ.