2010-04-13 2 views
3

Я немного запутался с кактусом и макетными объектами (jMock, Easy mock).Кактус против ложных объектов (jMock, Easy mock)

Не могли бы вы ответить на следующие вопросы?

  1. Когда использовать кактус для тестирования?
  2. Когда не использовать Cactus для тестирования?
  3. Когда использовать тестируемые объекты?
  4. Когда не использовать макеты для тестирования?

ответ

4

Ну, объективного ответа на этот вопрос нет, но ложные объекты касаются тестирования поведения вашего кода, но не могут сказать вам, правильно ли вы взаимодействуете с контейнером.

Кактус запускает ваш код в контейнере, поэтому он действительно является скорее интеграционным тестом, но то, что он говорит вам, заключается в том, что ваш код действительно взаимодействует с контейнером правильно (то, что он отправляет, является законным, то, что он возвращает, является реальным).

Итак, макет говорит вам, что если вы хотите поведения x, вы получите поведение x. Кактус говорит вам, что поведение x фактически получает ожидаемый результат в контейнере.

Какой из них вы используете, зависит от того, что вы пытаетесь выполнить с помощью своего теста. Если вы хотите сделать больше TDD, макетный подход - это путь. Вы выполняете отдельные прототипы, чтобы узнать, достаточно ли вы знаете, как работает контейнер для написания кода, затем вы выполняете модульное тестирование, а затем у вас есть тесты интеграции/приемочные испытания, чтобы убедиться, что все это работает.

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

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

3

Когда использовать кактус для тестирования?

Для проведения интеграционных испытаний (включая взаимодействия с контейнером). Это или было сладкое пятно для Кактуса. Эти тесты, как правило, крупнозернистые ... и их выполнение происходит не очень быстро.

Когда не использовать Кактус для тестирования?

Для других тестов, кроме интеграционных тестов (и даже для интеграционных тестов, прошло некоторое время с тех пор, как я видел тесты Cactus).

Когда нужно использовать контрольные объекты для тестирования?

Если вы хотите что-то модульное тестирование в изоляции зависимых вещей. Эти тесты обычно мелкозернистые, и их выполнение выполняется быстро.

Когда не нужно использовать макеты для тестирования?

Если вы хотите писать интеграционные тесты (т.е. для проверки взаимодействия), функциональные тесты и т.д.

Mock Objects vs In-Container testing страница на веб-сайте Cactus суммирует это довольно хорошо.

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