Модульное тестирование C-кода
Лично мне нравится Google Test framework.
Настоящая unit-tests трудность при тестировании test кода C - это нарушение зависимостей testing от внешних модулей, чтобы unit-testing вы могли изолировать код testing по единицам. Это может быть unit-test особенно проблематично, когда embedded вы пытаетесь протестировать software-testing устаревший код. В этом случае unit-tests я часто использую компоновщик unit-tests для использования функций-заглушек testing в тестах.
Это то, что люди software-testing имеют в виду, когда говорят unit-testing о "швах". В C ваш единственный software-testing вариант - использовать препроцессор unit-test или компоновщик для имитации unit-testing ваших зависимостей.
Типичный unittest набор тестов в одном из моих software-testing проектов на C может выглядеть c так:
#include "myimplementationfile.c"
#include
// Mock out external dependency on mylogger.o
void Logger_log(...){}
TEST(FactorialTest, Zero) {
EXPECT_EQ(1, Factorial(0));
}
Обратите внимание, что вы фактически включаете файл C, а не файл заголовка. Это дает преимущество embedded-control доступа ко всем статическим embedded элементам данных. Здесь я c имитирую свой регистратор unit-testing (который может находиться unittest в logger.o и давать пустую unit-testing реализацию. Это означает, что testing тестовый файл компилируется unit-testing и связывается независимо embedded от остальной части кода и unit-testing выполняется изолированно.
Что unit-testing касается кросс-компиляции unit-tests кода, для того, чтобы это embedded-control работало, вам нужны хорошие unittest средства на цели. Я сделал software-testing это с помощью кросс-компиляции unittest googletest для Linux на архитектуре unit-test PowerPC. Это имеет смысл, потому testing что у вас есть полная оболочка embedded-systems и операционная система для unit-testing сбора результатов. Для менее unit-test богатых сред (которые я классифицирую unit-test как все, что не имеет полной test ОС) вы должны просто собрать embedded и запустить на хосте. В любом testing случае вам следует сделать tests это, чтобы вы могли автоматически tests запускать тесты как часть unit-testing сборки.
Я считаю, что тестирование embedded кода C++ в целом намного software-testing проще из-за того, что объектно-ориентированный test код в целом гораздо менее embedded-control связан, чем процедурный (конечно, это embedded-control во многом зависит от стиля embedded кодирования). Также в C++ вы embedded-control можете использовать такие unit-test приемы, как внедрение зависимостей embedded-systems и переопределение методов, чтобы embedded-systems получить стыки в коде, который tests в противном случае инкапсулируется.
У unit-test Майкла Фезерса есть excellent book about testing legacy code. В одной test главе он описывает методы testing работы с не объектно-ориентированным test кодом, который я настоятельно tests рекомендую.
Изменить: я написал blog post о unit-test процедурном коде модульного embedded тестирования с помощью source available on GitHub.
Изменить: существует embedded-control new book coming out from the Pragmatic Programmers, который конкретно касается embedded кода C модульного тестирования, который test I highly recommend.
c
unit-testing
testing
embedded
Модульное тестирование C-кода
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.