Обе две маркированные точки являются допустимыми вариантами, но каждая из них представляет два различных типа тестирования.
На очень высоком уровне использование фиктивных объектов (для вашей второй маркированной точки) отлично подходит для модульного тестирования -- который просто тестирует ваш код (то есть тестируемая система или SUT), и ничего более постороннего для него.Любые другие зависимости удаляются.Затем вы можете написать контрольные примеры, чтобы выбросить как можно больше различных состояний ошибки (а также, конечно, протестировать «счастливый путь»).Тот факт, что ваша область состояний ошибок недокументирована, вызывает сожаление, и вам следует постараться как можно лучше сократить это.Каждый раз, когда вы сталкиваетесь с новым состоянием ошибки с фактическим внешним устройством, вы должны выяснить, как воспроизвести его с помощью кода, а затем написать еще один новый модульный тест для воссоздания этого условия через вашу фиктивную среду.
Далее,тестирование с подключенными инструментами (согласно первому пункту) отлично подходит для интеграционного тестирования, которое больше тестирует ваш код наряду с фактическими внешними зависимостями.
В общем, модульное тестирование должно быть быстрым (в идеале, под10 минут, чтобы скомпилировать код и запустить весь комплект модульных тестов.) Это означает, что вы быстро получите обратную связь от ваших модульных тестов, если любой написанный вами новый код вызовет сбой любых тестов.Интеграционное тестирование по своей природе может занять больше времени (если, например, одному из ваших внешних устройств требуется 1 минута для вычисления результата или выполнения задачи, и у вас есть 15 различных наборов входных данных, которые вы тестируете, это правильно, 15 минут)для одного небольшого набора тестов.) Ваш CI-сервер (у вас должен быть один из тех, который автоматически компилирует и запускает все тесты) должен автоматически запускаться при фиксации в вашем репозитории управления исходным кодом.Он должен скомпилировать и запустить модульные тесты за один шаг.После того, как эта часть выполнена, она должна предоставить вам обратную связь (хорошую или плохую), а затем, если модульные тесты пройдут успешно, она автоматически запустит ваши интеграционные тесты.Это предполагает, что к вашему серверу CI подключено либо реальное устройство, либо подходящая замена (что бы это ни значило в вашей конкретной среде).
Надеюсь, это поможет.