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