Код тестування блоку C [закрито]


853

Я працював над вбудованою системою цього літа, написаною прямо на C. Це вже існуючий проект, який взяла на себе компанія, над якою працюю. Я вже досить звик писати тести на Java на JUnit, але втратив найкращий спосіб написати одиничні тести для існуючого коду (який потребував рефакторингу), а також новий код, доданий до системи.

Чи є проекти, які роблять тестування простого коду С таким же простим, як одиничне тестування Java-коду за допомогою JUnit? Будемо дуже вдячні за будь-яке розуміння, яке стосуватиметься вбудованої розробки (крос-компіляція на платформу arm-linux).



2
@zmo - Рекомендації щодо програмного забезпечення - це сайт обміну стеками для отримання рекомендацій щодо програмного забезпечення. Я не використовував його, тому не можу сказати, наскільки добре він працює. Ви повинні перевірити їх правила розміщення, перш ніж розміщувати там.
Джонатан Леффлер

Відповіді:


495

Один блок тестування одиниць на C - це перевірка ; перелік одиничних рамок тестування в C можна знайти тут і відтворений нижче. Залежно від того, скільки стандартних функцій бібліотеки має ваш час виконання, ви можете або не зможете використовувати одну з них.

AceUnit

AceUnit (Розширений C та вбудований блок) виставляє себе як зручне тестове середовище для кодового блоку С. Він намагається імітувати JUnit 4.x і включає можливості, схожі на рефлексію. AceUnit можна використовувати в середовищах з обмеженнями ресурсів, наприклад, вбудованим програмним забезпеченням, і, що важливо, він працює добре в середовищах, де ви не можете включити єдиний стандартний заголовок і не можете викликати єдину стандартну функцію C з бібліотек ANSI / ISO C. Він також має порт Windows. Він не використовує вилки для лову сигналів, хоча автори виявили зацікавленість у додаванні такої функції. Дивіться домашню сторінку AceUnit .

GNU Autounit

Багато в тому ж рядку, що і Check, включаючи форсування запуску одиничних тестів в окремому просторі адреси (насправді оригінальний автор Check перевірив цю ідею у GNU Autounit). GNU Autounit широко використовує GLib, що означає, що для зв’язування та подібних потреб потрібні спеціальні параметри, але це може не скласти для вас великих проблем, особливо якщо ви вже використовуєте GTK або GLib. Дивіться домашню сторінку GNU Autounit .

cUnit

Також використовує GLib, але не роздрібно захищає адресний простір тестів одиниці.

CUnit

Стандартний C, з планами на реалізацію графічного інтерфейсу Win32. В даний час не роздвоєний або іншим чином захищає адресний простір тестів одиниці. На початку розвитку. Дивіться домашню сторінку CUnit .

CuTest

Простий фреймворк із лише одним .c та одним .h файлом, який ви потрапляєте у своє початкове дерево. Дивіться домашню сторінку CuTest .

CppUnit

Основна рамка тестування блоку для C ++; ви також можете використовувати його для тестування коду С. Він стабільний, активно розвинений та має інтерфейс GUI. Основні причини не використовувати CppUnit для C - це по-перше, що він досить великий, по-друге, ви повинні написати свої тести на C ++, а це означає, що вам потрібен компілятор C ++. Якщо це не схоже на занепокоєння, це, безумовно, варто розглянути разом з іншими структурами тестування одиниць C ++. Дивіться домашню сторінку CppUnit .

embUnit

embUnit (Embedded Unit) - ще одна тестова основа для вбудованих систем. Здається, що AceUnit замінює цю. Домашня сторінка вбудованого блоку .

MinUnit

Мінімальний набір макросів і це все! Сенс у тому, щоб показати, як легко перевірити свій код. Див. Домашню сторінку MinUnit .

CUnit для містера Андо

Реалізація CUnit, яка є досить новою та, мабуть, ще на початку розвитку. Дивіться домашню сторінку містечка Андо .

Цей список востаннє оновлювався у березні 2008 року.

Більше рамок:

CMocka

CMocka є тестовою основою для C з підтримкою макетних об'єктів. Це простий у використанні та налаштуванні.

Див . Домашню сторінку CMocka .

Критерій

Критерій - це тестова рамка тестування на платформі C, що підтримує автоматичну реєстрацію тестів, параметризовані тести, теорії та може виводити в різні формати, включаючи TAP та JUnit XML. Кожен тест виконується у своєму процесі, тому сигнали та збої можна повідомляти або перевіряти, якщо це потрібно.

Додаткову інформацію див. На головній сторінці критеріїв .

HWUT

HWUT - це загальний інструмент Unit Test з великою підтримкою C. Він може допомогти створювати Makefiles, генерувати масивні тестові випадки, кодовані в мінімальних «таблицях ітерації», ходити по стаціонарних машинах, генерувати C-заглушки тощо. Загальний підхід є досить унікальним: вердикти базуються на «хорошій формі / поганій вигоді». Однак функція порівняння гнучка. Таким чином, для перевірки може використовуватися будь-який тип скриптів. Він може застосовуватися до будь-якої мови, яка може отримати стандартний вихід.

Дивіться домашню сторінку HWUT .

CGreen

Сучасна, портативна, мовна система тестування та глузування для C та C ++. Він пропонує додаткові позначення BDD, глузуючу бібліотеку, можливість запускати його в одному процесі (щоб спростити налагодження). Доступний тестовий бігун, який автоматично відкриває тестові функції. Але ви можете створити власну програмно.

Усі ці функції (та більше) пояснені в посібнику CGreen .

У Вікіпедії подано детальний перелік рамок тестування одиниць С у розділі Перелік одиничних рамок тестування: C


Спочатку чек виглядає дуже солідно. Мені доведеться побачити, як він тримається під вогнем реального використання ... але, безумовно, схоже, що він може відповідати законопроекту.
Пол Осборн

8
Ми використовуємо перевірку коду тестування одиниць на наших вбудованих системах. Здебільшого перевірка була вдалим вибором, але зараз ми працюємо над системами, що працюють на uClinux, і оскільки перевірка вимагає вилки, вона не працює в цих системах. : /
Девід Холм

1
@labyrinth Той, що знаходиться в Ubuntu, датується 2002 р. Найновіша версія - з цього року (2014 року на цей коментар). Мені довелося складати це з джерела.
Баррі Браун

4
HWUT створює дистанційно керовані заглушки, що стає дуже зручним, якщо ви хочете писати тести для модулів, які взаємодіють із жорсткими драйверами. Ці драйвери в більшості випадків відсутні на ПК. Документація HWUT
Frank-Rene Schäfer

1
Як повідомляє Github Page Check , остання версія 0.11.0виходить 17 грудня 2016 року .
Mandeep Sandhu

164

Особисто мені подобається рамка тесту Google .

Справжня складність у тестуванні коду С - це порушення залежностей від зовнішніх модулів, щоб ви могли ізолювати код у одиницях. Це може бути особливо проблематичним, коли ви намагаєтеся пройти тести навколо застарілого коду. У цьому випадку я часто опиняюсь, що використовую лінкер, щоб використовувати функції тестів в тестах.

На це звертаються люди, коли говорять про « шви ». У 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. Це має сенс, оскільки там ви маєте повну оболонку і операційний центр, щоб зібрати свої результати. Для менш багатих середовищ (які я класифікую як будь-що без повної ОС), ви повинні просто створити та запустити на хості. Ви повинні зробити це все одно, щоб ви могли автоматично запускати тести як частину збірки.

Я вважаю, що тестування коду C ++, як правило, набагато простіше через те, що код OO, як правило, набагато менш пов'язаний з процедурним (звичайно, це багато залежить від стилю кодування). Також у C ++ ви можете використовувати такі прийоми, як ін'єкція залежності та переоцінка методу, щоб отримати шви в код, який інакше є інкапсульованим.

Майкл Пірс має чудову книгу про тестування застарілого коду . В одній главі він висвітлює методи поводження з кодом, що не є ООС, який я дуже рекомендую.

Редагувати : Я написав повідомлення в блозі про процедурний код тестування одиниць із джерелом, доступним на GitHub .

Редагувати : Існує нова книга від Прагматичних програмістів, яка спеціально стосується коду тестування блоку С, який я дуже рекомендую .


17
Не купуйте прагу. прог книга. Він не містить ніяких відомостей, яких немає у відповідях на це питання.
Філ

3
Я знаю, що у C і C ++ є багато перекриттів, але це не вражає мене як хорошу ідею використовувати бібліотеку тестування на C ++, коли ви створюєте код, який в кінцевому підсумку буде зібраний у компіляторі C.
Рафаель Альмейда

2
@RafaelAlmeida по суті я згоден, те, що я показую тут, є препроцесорним швом, не загортаючи C, включаючи зовнішню сторону C. Незалежно від цього, я вважаю, що C ++ є досить зручним як мова опису тесту на практиці. Я також написав основу для тестування на основі С, тому я не догматично з цього приводу :-) github.com/meekrosoft/fff
mikelong

@Phil Я не згоден. Я вважав, що книга дуже цінна, особливо для того, хто не справжній у C.
Чендрікс

Я використовую рамку підроблених функцій для висміювання функцій HAL, як зазначено вище. Він дуже добре працює з gTest. github.com/meekrosoft/fff
Леонардо

135

Minunit - це надзвичайно проста рамка тестування одиниць. Я використовую його для тестування коду мікроконтролера c для avr.


5
У мене немає досвіду роботи з вбудованими системами, тому я не можу це коментувати, але для невеликих програм C (шкільні роботи, сценарії) це виглядає ідеально. Чудове посилання.
AndrewKS

3
@toasted_flakes Я зробив це в GitHub суттю: gist.github.com/sam159/0849461161e86249f849
Sam

Це досить близько до того, що я придумав, перш ніж почав шукати тут! Я хотів би автоматизувати тестування, щоб TEST (функція, тіло) створював функцію і зберігав вказівник на функцію, але, схоже, мені знадобиться деяка зовнішня обробка.
Ben Kushigian

41

Наразі я використовую рамку тестування модуля CuTest:

http://cutest.sourceforge.net/

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

  • файл заголовка, включений туди, де ви викликаєте підпрограми CuTest
  • єдиний додатковий файл "С", який слід зібрати / зв'язати у зображення
  • деякий простий код, доданий до main для налаштування та виклику одиничних тестів - у мене просто це є у спеціальній функції main (), яка збирається, якщо UNITTEST визначено під час збирання.

Система повинна підтримувати купу та деякі функції stdio (які мають не всі вбудовані системи). Але код досить простий, щоб ви могли, ймовірно, працювати в альтернативах цим вимогам, якщо їх платформа не має.

З розумним використанням зовнішніх блоків "C" {} він також підтримує тестування C ++ просто чудово.


1
Я другого голосую за CuTest. Я використовував його для розробки домашньої мови на Nintendo DS і не мав жодних труднощів з її налаштуванням або використанням.
Теран

Я третій. Я завантажив його, коли він був версією 1.4, і змінив його, щоб скинути на XML. Схоже, є версія 1.5, яку мені доведеться завантажити та переглянути.
Тейлор Ціна

2
CuTest добре працював для мене, щоб перевірити код, що працює в системі QNX.
Джейс Браунінг

Він стверджує, що працює як JUnit, але я, здається, сумую Beforeі Afterдзвоню. Загалом, це мило.
Драгас

40

Я говорю майже так само, як і Ratkok, але якщо у вас є вбудований поворот до одиничних тестів, то ...

Єдність - Настійно рекомендується рамка для одиничного тестування коду С

Приклади в книзі, що згадується в цій темі TDD для вбудованого C , написані за допомогою Unity (і CppUTest).


5
Єдність у поєднанні з автоматизованою генерацією макетів за допомогою CMock є досить хорошою.
thegreendroid

Ви можете запропонувати якийсь хороший підручник для cmock?
melwin_jose

Є дуже хороший підручник для CMock and Unity, оркестрований Ceedling: dmitryfrank.com/articles/unit_testing_embedded_c_applications
Дмитро Френк

35

Ви також можете поглянути на libtap , структуру тестування на С, яка видає протокол Test Anything (TAP) і, таким чином, добре інтегрується з різноманітними інструментами для цієї технології. В основному використовується в динамічному мовному світі, але він простий у використанні та стає дуже популярним.

Приклад:

#include <tap.h>

int main () {
    plan(5);

    ok(3 == 3);
    is("fnord", "eek", "two different strings not that way?");
    ok(3 <= 8732, "%d <= %d", 3, 8732);
    like("fnord", "f(yes|no)r*[a-f]$");
    cmp_ok(3, ">=", 10);

    done_testing();
}

Я власноруч розгорнув власний еквівалент libtap для власних проектів, але тепер, коли я знаю, що це існує, мені більше не доведеться підтримувати свою. Класно!
ефеміент

1
ok(TESTING==IsSimple(), "libtap is super easy to use")
AShelly

26

Існує елегантна рамка для тестування модулів для C із підтримкою макетних об'єктів, що називаються cmocka . Він вимагає лише стандартної бібліотеки С, працює на різних обчислювальних платформах (включаючи вбудовані) та з різними компіляторами.

Він також має підтримку різних форматів виводу повідомлень, таких як Subunit, Test Anything Protocol та jUnit XML звіти.

cmocka створена для роботи на вбудованих платформах, а також має підтримку Windows.

Простий тест виглядає так:

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>

/* A test case that does nothing and succeeds. */
static void null_test_success(void **state) {
    (void) state; /* unused */
}

int main(void) {
    const struct CMUnitTest tests[] = {
        cmocka_unit_test(null_test_success),
    };
    return cmocka_run_group_tests(tests, NULL, NULL);
}

API повністю документований і кілька прикладів є частиною вихідного коду.

Для початку роботи з cmocka слід прочитати статтю на LWN.net: Тестування модулів з макетними об'єктами в C

cmocka 1.0 випущена в лютому 2015 року.


3
Коли я дивлюся на cmockery та cmocka, то документація виглядає подібним чином. Чи пов'язані ці проекти?
Метт Фрідман

6
cmocka є спадкоємцем cmockery. Я роздрібнив це тому, що він не збережений.
asn

21

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

Cmock сканує файли заголовків та генерує макетні функції на основі знайдених прототипів. Макети дозволять вам протестувати файл C у ідеальній ізоляції. Все, що вам потрібно буде зробити, - це пов’язати тестовий файл із макетами замість реальних файлів об’єктів.

Ще однією перевагою cmock є те, що він перевірить параметри, передані знученим функціям, і дозволить вам вказати, яке повернене значення повинні надавати макети. Це дуже корисно для перевірки різних потоків виконання ваших функцій.

Тести складаються з типових функцій testA (), testB (), в яких ви формуєте очікування, виклику функцій для тестування та перевірки тверджень.

Останнім кроком є ​​створення єдиного бігу для ваших тестів. Cmock прив’язаний до рамки тестування єдності. Єдність так само легко засвоїти, як і будь-які інші рамки тестування.

Варто спробувати і досить легко зрозуміти:

http://sourceforge.net/apps/trac/cmock/wiki

Оновлення 1

Ще одна основа, яку я досліджую, - це Cmockery.

http://code.google.com/p/cmockery/

Це чиста рамка С, яка підтримує тестування та глузування блоків. Він не має залежності від рубіну (всупереч Cmock) і має дуже малу залежність від зовнішніх ліб.

Для налаштування макетів потрібно трохи більше ручної роботи, оскільки це не створює код. Це не представляє великої праці для існуючого проекту, оскільки прототипи не зміняться сильно: як тільки ви матимете свої макети, вам не потрібно буде їх змінювати на деякий час (це мій випадок). Додатковий набір тексту забезпечує повний контроль над макетами. Якщо є щось, що вам не подобається, ви просто міняєте свій макет.

Не потрібно спеціального тестового бігуна. Вам потрібно лише створити масив тестів і передати його функції run_tests. Тут трохи більше ручної роботи, але мені точно подобається ідея автономної автономної рамки.

Плюс це містить кілька чудових трюків C, яких я не знав.

Загалом Cmockery потребує трохи більше розуміння знущань, щоб розпочати роботу. Приклади повинні допомогти вам подолати це. Схоже, він може виконати роботу за допомогою простішої механіки.


8
Ви можете подивитися на cmocka.org, який є спадкоємцем для cmockery!
asn

Ви можете запропонувати якийсь хороший підручник для cmock?
melwin_jose

Почніть зі статті LWN, а потім перевірте приклад каталогу cmocka.
Asn

16

Як новачок на C, я знайшов слайди під назвою Тестова розробка в С дуже корисними. В основному, він використовує стандарт assert()разом з, &&щоб доставити повідомлення, без будь-яких зовнішніх залежностей. Якщо хтось звик до системи тестування повного стека, це, ймовірно, не зробить :)


Мене так турбувала помилка у функції is_spare () ... але дякую за посилання! Я думаю, TDD не вловлює ВСІ помилки.
Джис Бен

Це найпростіший підхід TDD, який я бачив для C, який ви можете дотримуватися лише assertбез додаткових бібліотек або фреймворків. Я думаю, якщо ти просто новачок, це може стати відправною точкою.
kabirbaidhya

16

Ми написали CHEAT (розміщений на GitHub ) для зручності користування та портативності.

Він не має залежностей і не вимагає встановлення чи налаштування. Потрібен лише файл заголовка та тестовий випадок.

#include <cheat.h>

CHEAT_TEST(mathematics_still_work,
    cheat_assert(2 + 2 == 4);
    cheat_assert_not(2 + 2 == 5);
)

Тести складаються у виконуваний файл, який піклується про виконання тестів та звіту про їх результати.

$ gcc -I . tests.c
$ ./a.out
..
---
2 successful of 2 run
SUCCESS

Він також має гарні кольори.


Підвищення для прекрасної колонії (і)
Мауг каже, що поверніть Моніку

12

існує CUnit

І Embedded Unit - це блок тестування блоку для вбудованої системи C. Його дизайн було скопійовано з JUnit та CUnit тощо, а потім дещо адаптовано до вбудованої системи C. Вбудований блок не потребує std C libs. Усі об’єкти розподіляються на зону const.

А Тессі автоматизує тестування вбудованого програмного забезпечення.


1
Я спробував embunitі був розчарований цим.
Крейг МакКвін

1
Наприклад, дивіться повідомлення про помилку, який я подав, а також інший звіт про помилку, який не використовується протягом 3 років.
Крейг МакКвін

12

Я не використовую фреймворк, я просто використовую цільову підтримку для автоінструментів. Реалізуйте "головне" та використовуйте аргументи.

Мій тест реж. Makefile.am (и) виглядає так:

check_PROGRAMS = test_oe_amqp

test_oe_amqp_SOURCES = test_oe_amqp.c
test_oe_amqp_LDADD = -L$(top_builddir)/components/common -loecommon
test_oe_amqp_CFLAGS = -I$(top_srcdir)/components/common -static

TESTS = test_oe_amqp

2
Ми не використовуємо autotools (хоча було б непогано перейти в якийсь момент). Історично я використовував основний метод для тестування, і це не є поганим рішенням.
Пол Осборн

11

У книзі Майкла Пера "Ефективна робота зі спадковим кодом" представлено багато методик, специфічних для тестування одиниць під час розробки C.

Існують методи, пов'язані з ін'єкцією залежності, які є специфічними для С, яких я більше ніде не бачив.



6

Я використовую CxxTest для вбудованого середовища c / c ++ (насамперед C ++).

Я віддаю перевагу CxxTest, оскільки він має сценарій perl / python для створення тестового бігуна. Після невеликого нахилу, щоб встановити його (все-таки менший, оскільки вам не потрібно писати тестовий бігун), його досить просто використовувати (включає зразки та корисну документацію). Найбільша робота - це налаштування «апаратного» коду доступу, щоб я міг ефективно перевірити модуль / модуль. Після цього легко додати нові тестові кейси.

Як вже згадувалося раніше, це тестова рамка модулів C / C ++. Тож вам знадобиться компілятор C ++.

Посібник користувача CxxTest CxxTest Wiki


Вам потрібен компілятор c ++, але код, який ви тестуєте, все ще може бути C. CxxTest - це дуже проста рамка для використання
Девід Сайкс


5

Прочитавши Minunit, я подумав, що кращим способом було тест на макроствердженнях, який я дуже використовую як захисну програму. Тому я використав ту саму ідею Minunit, що змішується зі стандартним твердженням. Ви можете бачити мої рамки (гарним ім'ям може бути NoMinunit) в блозі k0ga


Зараз я використовую ваш utest.h у своєму проекті. Працює чудово і досить корисно. Дякую!
Йоган



4

Google має чудові рамки тестування. https://github.com/google/googletest/blob/master/googletest/docs/primer.md

І так, наскільки я бачу, він буде працювати з звичайним C, тобто не вимагає функцій C ++ (може знадобитися компілятор C ++, не впевнений).


Чи буде рамка google працювати з чистим C? Швидкий погляд на сторінку підказує, що це C ++.
Дана

4
Тест Google чудовий, але це дуже зручно для C ++. Він досить портативний і може бути використаний для тестування С, якщо вам довелося.
Джош Келлі

4

Cmockery - це нещодавно запущений проект, який складається з дуже простої у використанні бібліотеки C для написання одиничних тестів.


Ви можете подивитися на cmocka.org, який є спадкоємцем Cmockery.
впр

3

Спочатку подивіться тут: http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C

Моя компанія має бібліотеку С, яку користуються наші клієнти. Для тестування коду ми використовуємо CxxTest (тестова бібліотека одиниць C ++). CppUnit також працюватиме. Якщо ви застрягли в C, я рекомендую RCUNIT (але і CUnit хороший).


2

Якщо ви знайомі з JUnit, я рекомендую CppUnit. http://cppunit.sourceforge.net/cppunit-wiki

Тобто, якщо у вас є компілятор c ++, щоб робити одиничні тести. якщо ні, то я повинен погодитися з Адамом Розенфілдом, що перевірка - це те, що ти хочеш.


6
Питання стосується C, а не C ++
1800 ІНФОРМАЦІЯ

3
Ні, але C ++ може інтерфейсувати до бібліотек C. Тому насправді може бути ідеально тестувати бібліотеки С за допомогою тестової рамки одиниць С ++. (Моя компанія робить це дуже до речі, і це набагато простіше, ніж використовувати рамки тестових одиниць С.)
Кевін,

Я роблю те саме. У нас є бібліотека утиліт, написана на мові C, яку ми використовуємо під нашим кодом C ++ та мовами сценаріїв. Ми використовуємо CppUnit для тестів, і він працює досить добре, оскільки ми можемо використовувати однакові рамки і для C, і для C ++.
Jyaan

2

Я використовував RCUNIT, щоб зробити тестування на вбудований код на ПК перед тестуванням на цілі. Хороша абстракція апаратного інтерфейсу важлива, інакше регістри витривалості та пам’яті, нанесені на пам’ять, уб’ють вас.


2

спробуй lcut! - http://code.google.com/p/lcut


3
Деяка документація була б корисною. Передумови та цілі проекту, перелік можливостей, переваги перед існуючими альтернативами тощо допоможуть людям, які перевіряють це вперше.
Крейг МакКуїн

2

API Sanity Checker - тестова основа для C / C ++ бібліотек:

Автоматичний генератор тестів базових одиниць для спільної бібліотеки C / C ++. Він здатний генерувати розумні (у більшості, але, на жаль, не всі випадки) вхідні дані для параметрів, і складати прості ("розумність" або "мілководне") тестові випадки для кожної функції в API за допомогою аналізу декларацій у заголовку файли.

Якість сформованих тестів дозволяє перевірити відсутність критичних помилок у простих випадках використання. Інструмент здатний створювати та виконувати генеровані тести та виявляти збої (segfaults), аборти, всі види випромінюваних сигналів, ненульовий код повернення програми та вивішування програми.

Приклади:


1

Однією з методик є розробка одиничного тестового коду з рамкою C ++ xUnit (і компілятором C ++), зберігаючи джерело для цільової системи як модулі C.

Переконайтеся, що ви регулярно збираєте джерело С під своїм крос-компілятором, автоматично, якщо це можливо, з тестами на одиницю.


1

LibU ( http://koanlogic.com/libu ) має модульний тестовий модуль, який дозволяє явні тестові набори / залежність випадку, тестову ізоляцію, паралельне виконання та настроюваний формат звіту (формати за замовчуванням - xml та txt).

Бібліотека має ліцензію на BSD і містить багато інших корисних модулів - мережа, налагодження, часто використовувані структури даних, конфігурація тощо - якщо вони вам потрібні у ваших проектах ...


1

Я здивований, що ніхто не згадав Cutter (http://cutter.sourceforge.net/) Ви можете протестувати C і C ++, він безперебійно інтегрується з автоінструментами і має дійсно хороший підручник.



0

Якщо ви все ще шукаєте тестові рамки, CUnitWin32 - це платформа Win32 / NT.

Це вирішує одну фундаментальну проблему, з якою я стикався з іншими рамками тестування. А саме глобальні / статичні змінні знаходяться у детермінованому стані, оскільки кожен тест виконується як окремий процес.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.