2014-09-26 2 views
0

Это мой первый вопрос, задающий вопрос, поэтому, пожалуйста, дайте мне знать, если я смогу улучшить свой вопрос.Как вы интегрируете 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. Это становится еще более сложным, когда у вас есть перестановки изделок (например, Mockfoo, Mockbar, но не baz) и большое исходное дерево с различными правилами, флагами и т. Д.

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

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

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

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

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

ответ

1

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

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

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

+0

Согласен, используйте инструмент Ruby. Этот инструмент сборки на основе грабли называется Ceedling. У меня есть пошаговое руководство для начала работы с ним: http://www.electronvector.com/blog/try-embedded-test-driven-development-right-now-with-ceedling Нет причин, по которым вы не можете его использовать стороне Automake просто для запуска тестов. Отбросьте папку «vendor» из проекта Ceedling в свой проект и возьмите файл project.yml и rakefile.rb файлов. Затем измените конфигурацию источника и тестовой папки в папке project.yml в соответствии с вашим деревом проектов. – cherno

Смежные вопросы