Я попытаюсь сделать это чисто минимальным примером, чтобы быть применимым как можно большему числу людей, а также защитить любой доступ кодов, который может нарушить NDA. Надеюсь, все в порядке!CppUTest Unit Testing Framework Множественное определение исключения
Я использую CppUTest и CppUMock (компиляция с gcc/g ++ и make-файлы, созданные с помощью CMake) в сочетании с программным обеспечением Gitlab Continuous Integration для создания единичной тестовой среды для будущих коммитов и выпуска программного обеспечения. Однако я столкнулся с проблемой. Скажем, у меня есть следующие настройки папки (что у меня есть минимальная возможность изменять, кроме содержимого папки/тесты):
+-- src
+-- driver1.c
+-- driver2.c
+-- inc
+-- driver1.h
+-- driver2.h
+-- tests
+-- test_driver1.cpp
+-- test_driver2.cpp
+-- main.cpp
+-- cmakelists.txt
Файл CMakeLists будет содержать в том числе папки ИНК, составление ЦСИ папке и компиляции папки тестов. Однако предположим, что driver2.c опирается на методы, определяемые driver1.c. Это нормально, если нет никакой насмешливой настройки, потому что вы можете просто проверить результаты вызовов для методов driver2 в обычном режиме. Однако скажите, что я хочу издеваться над функцией method1 driver1, чтобы я мог правильно проверить метод driver1 метода method1 (используя CppUMock). Как правило, это было бы хорошо, если бы драйвер1 не компилируется, но добавляя что-то вроде так файл test_driver2.cpp:
void method1(int n) {
mock().actualCall("method1").withParameter("n", n);
}
Вызовет столкновение с реальным method1 в driver1.c с ошибкой линкера, как так:
CMakeFiles/Tests.dir/.../src/driver1.c:(.text+0x11d): multiple definition of 'method1'
CMakeFiles/Tests.dir/.../src/test_driver2.cpp:(.text+0x0): first defined here
по просьбе комментатора, здесь является то, что включают в себя структуру, как:
driver1.c includes driver1.h (obviously)
driver2.c includes driver2.h (obviously)
driver2.h includes driver1.h (for calling method1)
test cpp files include their respective .h files
(test_driver1.cpp -> driver1.h and test_driver2.cpp -> driver2.h)
method1 объявлен в driver1.h и определены в driver1.c. Я не могу редактировать эти файлы.
Я рад добавить детали по мере необходимости.
Каков наилучший способ обойти эту насмешливую проблему?
Вам необходимо показать (по крайней мере, выдержки) часть, в которой вы определяете метод1, и как вы # включаете различные заголовки в источники – TemplateRex
Добавлен @TemplateRex. method1 - это любой старый метод в файле driver1.c с объявлением в файле driver1.h. – Jeffrey
вы не можете добавить еще один 'method1()' в файл driver2.cpp и связать его вместе с driver2.cpp в тестовом драйвере. Если вы хотите высмеять, вы должны сказать, что CMake не компилировать driver1.cpp в качестве зависимости для test_driver2.cpp – TemplateRex