Кактус против ложных объектов (jMock, Easy mock) - PullRequest
3 голосов
/ 13 апреля 2010

Я немного запутался с Кактусом и макетами (jMock, Easy mock).

Может ли кто-нибудь ответить на следующие вопросы?

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

Ответы [ 2 ]

4 голосов
/ 13 апреля 2010

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

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

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

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

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

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

3 голосов
/ 13 апреля 2010

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

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

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

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

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

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

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

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

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

...