У меня есть ситуация, когда мне нужно написать несколько модульных тестов для некоторых драйверов устройств для встроенного оборудования. Код довольно старый и большой и, к сожалению, не имеет много тестов. Прямо сейчас единственный вид тестирования, который возможен, это полностью скомпилировать ОС, загрузить ее на устройство, использовать в реальных сценариях и сказать, что «это работает». Нет способа проверить отдельные компоненты.
Я натолкнулся на замечательную ветку , в которой обсуждается модульное тестирование встроенных устройств , из которой я получил много информации. Я хотел бы быть более конкретным и спросить, есть ли у кого-нибудь «лучшие практики» для тестирования драйверов устройств в таком сценарии. Я не ожидаю, что смогу смоделировать какие-либо устройства, с которыми разговаривает рассматриваемая плата, и поэтому, вероятно, придется тестировать их на самом оборудовании.
Делая это, я надеюсь, что смогу получить данные о покрытии модульных тестов для драйверов и уговорить разработчиков написать тесты, чтобы увеличить охват их драйверов.
Одна вещь, которая приходит мне в голову, - это писать встроенные приложения, работающие в ОС, проверять код драйвера и затем передавать результаты обратно в тестовый комплект. Устройство имеет несколько интерфейсов, которые я могу использовать, чтобы, вероятно, запустить приложение с моего тестового ПК, чтобы я мог использовать код.
Буду очень признателен за любые другие предложения или идеи.
Обновление: хотя это может быть не совсем терминология, когда я говорю «модульное тестирование», я имел в виду возможность тестировать / выполнять код без необходимости компилировать все драйверы OS + и загружать его на устройство. Если бы мне пришлось это сделать, я бы назвал это интеграцией / тестированием системы.
Проблема в том, что у нас есть ограниченное количество аппаратного обеспечения, и оно часто используется разработчиками при исправлении ошибок и т. Д. Сохранение одного выделенного и подключенного к компьютеру, на котором выполняется сервер CI и автоматизированное тестирование, может быть нет нет на данном этапе. Вот почему я ищу способы протестировать драйвер без необходимости фактически собрать все это и загрузить его на устройство.
Краткое описание
Основываясь на превосходных ответах, приведенных ниже, я думаю, что разумным способом решения этой проблемы было бы раскрытие функциональности драйвера с использованием IOCTL, а затем запись тестов в прикладной области встроенного устройства для фактического использования кода драйвера.
Также имеет смысл иметь небольшую программу, расположенную в прикладной области на устройстве, которая предоставляет API, который может работать с драйвером через последовательный порт или USB, так что основная часть модульного теста может быть написана на ПК, который будет связаться с оборудованием и запустить тест.
Если бы проект только начинался, я думаю, у нас было бы больше контроля над тем, как изолируются компоненты, так что тестирование можно проводить в основном на уровне ПК. Учитывая тот факт, что кодирование уже выполнено, и мы пытаемся дооснастить систему и тестовые наборы до системы, я думаю, что вышеупомянутый подход более практичен.
Спасибо всем за ваши ответы.