Ну, на этот вопрос нет однозначного ответа, но фиктивные объекты предназначены для тестирования поведения вашего кода, но не могут сказать вам, правильно ли вы взаимодействуете с контейнером.
Cactus запускает ваш код в контейнере, так что это действительно больше интеграционный тест, но он говорит вам, что ваш код действительно правильно взаимодействует с контейнером (то, что он отправляет, является законным, то, что он возвращает, реально) .
Итак, подведем итог: издевательство говорит вам, что если вам нужно поведение x, вы получаете поведение x. Кактус говорит вам, что поведение x действительно дает ожидаемый результат в контейнере.
Какой из них вы используете, во многом зависит от того, что вы пытаетесь выполнить с помощью теста. Если вы хотите использовать больше TDD, то вам стоит воспользоваться имитационным подходом. Вы делаете отдельный прототип, чтобы увидеть, достаточно ли вы знаете, как работает контейнер для написания кода, затем проводите модульное тестирование, а затем у вас есть интеграционные тесты / приемочные тесты, чтобы убедиться, что все это работает.
Если, однако, вы пытаетесь выполнять более традиционные модульные тесты, когда вы пытаетесь выполнить код с разными значениями, пытаясь протестировать крайние случаи и поведение, то выполнение этого с помощью mocks не очень вам скажет, так как большой часть вашего контейнера отсутствует.
В настоящее время я очень предпочитаю подход Mock, но если бы я вернулся в Cactus, было бы больше для проверки инвариантов о контейнере, чтобы, если мы обновим контейнер, мы знали, что ничего важного не изменилось в том, как работает контейнер должно повлиять на наш код.