Вы касаетесь одного из очень важных аспектов юнит-тестирования: он заставляет вас писать «хороший» код.Если вы хотите, чтобы ваш код был успешно тестируемым в тех случаях, которые вы описываете, у вас есть для использования хороших практик, таких как инверсия управления и разделение проблем .
Другими словами, чтобы написать успешные тесты, вам нужно , чтобы абстрагировать ваши зависимости, предпочтительно от интерфейсов.Затем вы можете запустить свои тесты, введя заглушку или смоделированную реализацию этого интерфейса, который имеет воспроизводимый и контролируемый вывод.Делая это, вы проверяете только логику (поведение или состояние, в зависимости от вкусов) тестируемого устройства, а не свои зависимости.Это вызывает у вас разделение интересов.
(я бы привел примеры, но вы не указали, какой язык вы используете)