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