Вы уже правильно рассматриваете эту проблему тестирования.
Этот фрагмент кода не подходит для модульного тестирования: с помощью модульного тестирования вы пытаетесь найти ошибки в небольших, изолированных частях программного обеспечения.,Но какие ошибки могут быть в этом примере кода, которые не связаны с другими компонентами?Ошибки здесь касаются таких вопросов, как «я вызываю правильные функции с правильными значениями для аргументов в правильном порядке аргументов, является ли другой компонент в правильном состоянии (например, инициализирован), и это возвращаемые значения и побочные эффекты, как я ожидаюим быть?Все эти вопросы связаны с интеграционным тестированием.
Плюс, есть еще один аспект интеграционного тестирования, который фокусируется не на взаимодействиях, а на компоненте в целом - иногда его называют тестированием компонентов, тестированием подсистем и т. Д.обнаружение ошибок, таких как: «правильные версии интегрированных компонентов, все функции, которые ожидаются от компонента на месте» и т. д.
Оба эти типа тестирования будут иметь смысл для данного примера кода, ии то, и другое будет выполнено с зависимыми компонентами, которые фактически находятся в нужных версиях.Используете ли вы по-прежнему какие-то макеты для косвенных зависимостей (например, макеты для запросов http, происходящих внутри зависимых компонентов) - это отдельная история.
Напротив, создание двойников / насмешек для вызовов на prepare()
, doActualWork()
и notify()
только для того, чтобы иметь возможность создавать юнит-тесты для doSomething()
, вряд ли поможет вам.Поскольку вы реализуете эти макеты, они будут отражать только ваше потенциальное неправильное понимание этих функций.