Код встроенных систем с хорошими юнит-тестами? - PullRequest
2 голосов
/ 25 марта 2010

Я смотрю на подходы к коду встроенных систем модульного тестирования, написанные на C.

В то же время я также ищу хороший UT-фреймворк, который я мог бы использовать. Фреймворк должен иметь достаточно небольшое количество зависимостей.

Какие-нибудь замечательные продукты с открытым исходным кодом, которые имеют хорошие UT?

РЕДАКТИРОВАТЬ:

Ребята, спасибо за ответы - я действительно ценю их, но это не напрямую отвечает на мой вопрос:

Знаете ли вы какой-либо код с открытым исходным кодом, который использует модульные тесты C? Я смотрю, чтобы увидеть, как это делается, чтобы я мог кое-что узнать из кода ...

Ответы [ 2 ]

2 голосов
/ 25 марта 2010

Модулируйте ваш код таким образом, чтобы внизу находился тонкий слой, который знает детали базового оборудования.Затем этот слой можно смоделировать на обычном ПК.Таким образом, вы можете использовать обычные библиотеки модульных тестов для разработки десктопов для тестирования всего кода, кроме этого тонкого нижнего слоя.

Мой опыт разработки встроенного программного обеспечения для Linux использует C ++, а не обычный C. Мы использовали cppunit для модульных тестов..

1 голос
/ 25 марта 2010

Редактировать : на странице проверки проекта есть список проектов, использующих проверку в качестве основы модульного тестирования. Некоторые ссылки устарели, но вы можете просмотреть источник модульного теста пигмент и SCEW ; нужно скачать источник для других.


minunit не имеет никаких зависимостей и может использоваться в качестве основы для создания вашей собственной инфраструктуры.

Что касается подхода, я начинаю с функций самого низкого уровня (листья). Очень часто, когда я тестирую функцию более высокого уровня, они вызывают функции более низкого уровня. Это не проблема, поскольку нижние функции уже были протестированы.

Я также модулирую код как «объект» или таблицу объектов. Функции-заглушки позволяют проводить тестирование изолированно от оборудования или других компонентов.

Я избавляюсь от статики с помощью определения, удаляющего их, или включаю исходный файл, содержащий функции для тестирования, в исходный файл модульных тестов.

#if defined(UNIT_TESTING)
#define STATIC
#else
#define STATIC static
#endif

Здесь нет ракетостроения, но это помогает.

И последнее: протестируйте поведение, а не реализацию, чтобы модульные тесты не прерывались при изменении реализации.

...