我使用CppUnit設置了一堆單元測試,但遇到沒有任何測試正在運行的問題。該項目分爲幾個小型圖書館,我計劃以同樣的方式劃分單元測試課,然後將它們全部鏈接到一個測試程序中。問題是,那麼測試類在自己的圖書館,他們沒有得到鏈接到主測試程序,除非我明確地給他們打電話,也就是我必須把在CppUnit測試庫中鏈接
runner.addTest(TestClass::suite());
單獨爲每個測試類,並且不能使用TestFactoryRegistry的makeTests()方法來獲取測試列表。如果我只是將它們全部編譯在頂部目錄中,那麼makeTests()方法可以正常工作,但如果我可以提供幫助的話,我不想將所有測試類都放在一個位置。
的CppUnit的文檔提供了以下小提示
使用助手 宏時鏈接的問題? CPPUNIT_TEST_SUITE_NAMED_REGISTRATION, CPPUNIT_REGISTRY_ADD和 CPPUNIT_REGISTRY_ADD_TO_DEFAULT:
當你創建一個項目,並寫 其單元測試套件,該工作是通過使用 所謂的輔助宏製成 容易。所述 問題是,如果在一個 的TestFixture類的源代碼文件中使用的那些 宏(比方說MyTest的作爲 例子),以及如果使用的線像 這一個
runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()
);
你的main()函數在文件 main.cpp中,根本沒有測試運行 !
的原因很簡單,鏈接 階段,構建 過程的步驟之一,千萬不要在最後 可執行文件插入對象 文件(.OBJ或.o文件),如果沒有未定義 符號在你的main.cpp中。
這樣一來,其 包含autoRegister的靜態 變量實例化對象代碼不是 最後的可執行部分,並且不能 到自己插入澆道中 的main()函數。
你必須在main.cpp中創建一個未定義的符號 使得mytest.o文件 與main.o集成到 最終的可執行文件。
把戲米歇爾Nolard致力於
,但並沒有說如何使這項工作,我只是足夠密集不能夠找出自己或找上線的例子。
現在我可以爲每個庫做一個單獨的可執行測試,最後我可能會這樣做,但我想先試着讓這個工作,所以我只有一個測試程序來運行測試整件事。任何想法/例子如何讓這個工作?
今晚我會試試這個。 – dagorym 2009-06-24 15:59:49