Как вы выполняете Unit-Test, например, тесты на C? Какая структура или вы выполняете другие тесты в качестве модульных тестов на уровне кода?
Как проверить код C
Ответ 1
Check - хорошая тестовая среда для C.
Ответ 2
Лично мне нравится Google Test framework.
Настоящая сложность тестирования кода C ломает зависимости от внешних модулей, поэтому вы можете изолировать код в единицах. Это может быть особенно проблематично, когда вы пытаетесь получить тесты по устаревшему коду. В этом случае я часто использую компоновщик для использования функций заглушек в тестах.
Это то, о чем люди говорят, когда говорят о швах. В C ваш единственный вариант - использовать предварительный процессор или компоновщик для извлечения зависимостей.
Типичный набор тестов в одном из моих проектов на C может выглядеть следующим образом:
#include "myimplementationfile.c"
#include <gtest/gtest.h>
// Mock out external dependency on mylogger.o
void Logger_log(...){}
TEST(FactorialTest, Zero) {
EXPECT_EQ(1, Factorial(0));
}
Обратите внимание, что вы фактически включаете файл C, а не файл заголовка. Это дает преимущество доступа ко всем статическим элементам данных. Здесь я издеваюсь над своим регистратором (который может быть в logger.o и дает пустую реализацию. Это означает, что тестовый файл компилируется и связывается независимо от остальной базы кода и выполняется изолированно.
Что касается кросс-компиляции кода, для этого вам нужны хорошие объекты для цели. Я сделал это с помощью googletest cross, скомпилированного в Linux на архитектуре PowerPC. Это имеет смысл, потому что у вас есть полная оболочка и os для сбора ваших результатов. Для менее богатых сред (которые я классифицирую как угодно без полной ОС) вы должны просто создавать и запускать на хосте. Вы должны сделать это в любом случае, чтобы вы могли автоматически запускать тесты как часть сборки.
Я нахожу тестирование кода на С++, как правило, намного проще из-за того, что код OO в целом гораздо менее связан с процедурным (конечно, это сильно зависит от стиля кодирования). Также в С++ вы можете использовать трюки, такие как инъекция зависимостей и метод переопределения, чтобы получить швы в код, который иначе инкапсулирован.
Michael Feathers имеет . В одной главе он описывает методы работы с кодом, отличным от OO, который я очень рекомендую.
Изменить. Я написал сообщение о процедуре модульного тестирования с источник, доступный на GitHub.
Ответ 3
XCode на Mac имеет то, что они называют встроенным встроенным CPTest. Я сделал переносимую версию, которую я разместил здесь.
http://www.loufranco.com/blog/files/AppleCppUnitPort.html
Я нацелился на gcc на Windows, но я полагаю, что он будет работать в другом месте, и это очень простая структура, если вы хотите увидеть, как реализовать такую вещь.
Ответ 4
Вы можете найти информацию о нескольких фреймах C unit test в www.xprogramming.com, в частности, в software.
Ответ 5
Возможно, вам стоит взглянуть на cfix - это единая платформа тестирования, предназначенная для платформ Win32 и режима ядра NT, Поддерживает как C, так и С++.
Ответ 6
Если вы используете Windows в качестве среды разработки, CUnitWin32 может служить вашей цели