Ваша проблема тестирования может содержать аспекты модульного тестирования, но из описания, как представляется, (по крайней мере, также) рассматриваются аспекты интеграционного тестирования.Например, вы спрашиваете
, например, как проверить, правильно ли установлен лоток для бумаги
Я прочитал это следующим образом: Вы хотите быть уверены, чточто функциональность печати вашего программного обеспечения достигает того, что на реальных физических принтерах лоток для бумаги был установлен правильно.Если это понимание верно, то это выходит за рамки того, что вы можете достичь с помощью модульного тестирования:
С помощью модульного тестирования вы пытаетесь найти ошибки в небольших, изолированных частях программного обеспечения.Изоляция достигается путем замены компонентов, от которых зависит тестируемое программное обеспечение (SUT).Эти сменные компоненты часто называют двойниками, насмешками или заглушками.Однако с такими двойными числами вы не можете найти те ошибки, которые связаны с неправильными представлениями о том, как должно работать взаимодействие SUT с зависимыми компонентами: поскольку вы реализуете двойные числа, вы реализуете их на основе ваших потенциальных неправильных представлений.
Для функциональности принтера это означает, что если вы удвоите функцию выбора лотка для бумаги, то сможете протестировать определенные аспекты устройства, но вы все равно не будете знать, правильно ли оно взаимодействует с real функция выбора лотка для бумаги.Это не недостаток модульного тестирования: это просто причина, по которой помимо модульного тестирования вам также необходимы интеграция и системное тестирование.
Чтобы решить все аспекты проблемы тестирования, вы можете упростить свою жизнь.Создайте свой код так, чтобы вы пытались отделить вычисления от взаимодействий.Затем вы должны протестировать модули (функции, методы, ...), которые содержат вычисления с модульным тестированием.Те части, которые содержат взаимодействия, которые вы будете тестировать с помощью интеграционного тестирования.Вероятно, останутся части кода, где такое разделение затруднено, и вы останетесь с вычислениями, смешанными с взаимодействиями.Здесь вам, возможно, придется выполнить модульное тестирование с двойными значениями (гарантируя, что вы можете внедрить их, см. Введение зависимостей и инверсию управления).Но эта стратегия в целом может сэкономить вам много усилий для создания двойников.