我會盡量讓這個純粹的最小范例儘可能適用於儘可能多的人,以及保護任何可能違反NDA的代碼共享。希望這是好的!CppUTest單元測試框架多重定義例外
我正在使用CppUTest和CppUMock(用gcc/g ++編譯並使用CMake創建makefiles)與Gitlab持續集成軟件一起創建未來提交和發佈軟件的單元測試環境。但是,我遇到了一些問題。比方說,我有以下文件夾的設置(即我得改變最小的能力,比/測試文件夾的內容除外):
+-- src
+-- driver1.c
+-- driver2.c
+-- inc
+-- driver1.h
+-- driver2.h
+-- tests
+-- test_driver1.cpp
+-- test_driver2.cpp
+-- main.cpp
+-- cmakelists.txt
的CMakeLists文件將包含包括INC文件夾,SRC的編譯文件夾和編譯測試文件夾。然而,讓我們說,driver2.c依賴於由driver1.c定義的方法。如果沒有模擬設置,這很好,因爲你可以正常測試對driver2方法的調用結果。但是,假設我想模擬driver1的method1函數,以便我可以檢查driver2是否正確調用了method1(使用CppUMock)。這通常會被罰款,如果驅動1沒有被編譯,但是添加一些像這樣的test_driver2.cpp文件:
void method1(int n) {
mock().actualCall("method1").withParameter("n", n);
}
會造成與實際方法1的碰撞中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)
方法1在driver1.h聲明和driver1.c定義。我無法編輯這些文件。
我很高興按要求添加細節。
解決這個嘲諷問題的最佳方法是什麼?
您需要顯示(至少摘錄)您定義method1的部分,以及如何將#include各種標頭放入源文件中 – TemplateRex
@TemplateRex added includes。 method1只是driver1.c文件中的任何舊方法,並在driver1.h文件中聲明。 – Jeffrey
您無法在driver2.cpp中添加另一個'method1()',並將其與driver2.cpp一起鏈接到測試驅動程序中。如果你想模擬,你應該告訴CMake不要將driver1.cpp編譯爲test_driver2.cpp的依賴關係。 – TemplateRex