Подтвердить что ты не робот

Как проверить код C

Как вы выполняете Unit-Test, например, тесты на C? Какая структура или вы выполняете другие тесты в качестве модульных тестов на уровне кода?

4b9b3361

Ответ 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 может служить вашей цели