Как вы интегрируете CMock/Unity с Automake?

Я впервые задаю вопрос здесь, поэтому, пожалуйста, дайте мне знать, если я могу улучшить свой вопрос..

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

Например, если я тестирую функцию test_me(), которая вызывает foo() в тестовом исходном файле test.c, то для симуляции foo() мне придется скомпилировать test_test_me: test_me.c, Mockfoo.c, and test.c.

test_me() обычно компилируется как test_me: test_me.c and foo.c

Mockfoo.c генерируется с использованием сценария Ruby, предоставленного CMock с использованием foo.h.

Как вы видете, foo.c должен быть заменен на Mockfoo.c для того, чтобы создать тестовую программу, test_test_me, Mockfoo.c необходим, чтобы test_test_me мог ссылаться на ложные вызовы foo, а не на исходный вызов foo. Замена источника становится сложной, когда количество зависимостей увеличивается.

Например, если test_me использует foo, bar и baz из библиотеки libfoo.a, которая состоит из foo.o, bar.o и baz.o, и я хочу просто смоделировать вызовы foo, тогда мне нужно собрать libfoo.a с модулями компиляции Mockfoo.o, bar.o и baz.o, чтобы затем ссылаться на мой test.o который использует ложные вызовы foo. Это становится еще сложнее, когда у вас есть перестановки mocks (например, Mockfoo, Mockbar, но не baz) и большое дерево исходников с различными правилами automake, флагами и т. Д.

Кроме того, добавление макетов должно быть простым, поскольку макеты часто необходимы для наших модульных тестов.

Некоторый контекст:

Я заинтересован в использовании CMock/Unity для добавления модульных тестов в тех случаях, когда код подвергается рефакторингу или добавляется новый код в большой проект C, к которому я только что присоединился.

В настоящее время проект использует Automake в качестве инструмента для сборки, и он здесь, чтобы остаться.

Я новичок в Automake. Я знаком со SCons и CMock.

1 ответ

Решение

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

Самый надежный способ взаимодействия с CMock/Unity - это использование rake, инструмента сборки на основе Ruby. Рейк можно вызвать с вашего Makefile.am. Цели могут быть созданы для вызова рейка для каждой фальшивой цели, указанной для построения ваших юнит-тестов.

В моем конкретном случае я не смог использовать rake из-за ограничений среды сборки. Вместо этого я решил использовать cmocka, которая имеет функциональность, предоставленную в CMock/Unity, и легко интегрируется с automake.

Другие вопросы по тегам