Если вы пишете программное обеспечение для манипулирования данными, поступающими из специализированного аппаратного обеспечения, то вы могли бы разумно создать резервные элементы для аппаратного обеспечения для тестирования программного обеспечения.
Если аппаратный интерфейс представляет собой нечто простое, например, последовательный порт, вы можете легко использовать кабель обратной связи, чтобы ваша программа взаимодействовала с имитируемым оборудованием. Я использовал этот подход несколько лет назад, когда писал программное обеспечение для общения с кредитным процессором. Моему тестовому приложению дали понять, что моим симулятором был модем и внутренний процессор.
Если вы пишете драйверы устройств PCI или программное обеспечение эквивалентного уровня, то, вероятно, вы не сможете создать программную замену.
Единственный хороший способ применить TDD к таким проблемам - это если вы можете подделать аппаратный ввод / вывод другой программой. Например, я работаю с кредитной картой для заправочных станций. В моем текущем проекте у нас есть симулятор, в котором электронная схема насоса подключена к некоторым переключателям, так что можно смоделировать работу насоса (рукоятка подъема, спусковой механизм, расход топлива). Вполне возможно, что мы могли бы создать симулятор, управляемый программным обеспечением.
С другой стороны, в зависимости от устройства, вы можете использовать стандартное испытательное оборудование (генераторы сигналов и т. Д.) Для подачи на него «известных входов».
Обратите внимание, что проблема заключается в том, что вы тестируете как аппаратное обеспечение, так и драйверы устройств вместе. К сожалению, это действительно единственный хороший выбор, который у вас есть на данном этапе - любое моделируемое оборудование, вероятно, будет достаточно отличаться от реального оборудования, которое будет бесполезно для тестирования.