2011-02-04 55 views
4

我正在開發一個C++中的DLL,並且想要使用Boost Test Libraries來執行該DLL的單元測試。我完全閱讀了Boost測試手冊,但由於我是新手,因此我有以下問題:用Boost :: Test測試DLL嗎?

我應該在開發我的DLL的同一個VC項目中添加測試類嗎?理想情況下,我想這樣做,但我很困惑,一個DLL沒有main(),另一方面,升壓測試需要自己的main()執行。那麼Boost測試輸出在這種情況下會出現在哪裏呢? (事實上​​,我幾乎實現這一點,並沒有看到任何輸出:(幾乎花了兩天時間我搞清楚這個問題,但沒有成功)

問候,

詹姆斯。

回答

4

你有3種方式來做到這一點:

  1. 你絕對可以做什麼其他的答覆建議,建立自己的LIB靜態。我不會推薦這種方式。

  2. 您的解決方案中可以有一個或多個單獨的單元測試項目。這些項目將與您的圖書館以及靜態或共享版本的Boost測試庫鏈接。每個項目都有一個由Boost.Test庫提供的主體,或者由你手動實現。

  3. 最後你還有另一個選擇,你可以把你的測試用例直接放到你的庫中。您需要鏈接共享版本的Boost Test。一旦你的庫建好了,你可以像現在這樣定期使用它,再加上你可以執行內置的測試用例。要執行測試用例,您需要一個測試運行器。 Boost Test提供了一個名爲「控制檯測試運行器」的控制檯。您需要構建一次,並且可以用於所有項目。使用此測試運行,你可以執行你的單元測試是這樣的:

    test_runner.exe --test「your_lib」 .dll文件

    您應該瞭解所有的長處和這種方法的優缺點。您的單元測試代碼將成爲您的生產庫的一部分。它會稍大一點,但另一方面,如果有必要,您可以在生產中運行測試。

+2

我在哪裏可以找到控制檯測試運行器BoostTest提供? – StNickolay 2013-09-10 12:52:46

2

你可以先建立自己的DLL作爲靜態庫文件,那麼你可以用它來直接編譯最終DLL並創建包含升壓試驗可執行下面是一個例子使用boost.build:。

lib lib_base 
    : # sources 
     $(MAIN_SOURCES).cpp # Sources for the library. 
    : # requirements 
     <link>static 
    : : ; 

lib dll_final 
    : # sources 
     lib_base 
     $(DLL_SOURCES).cpp # Sources for DllMain . 
    : # requirements 
     <link>shared 
    : : ; 

unit-test test_exe 
    : # sources 
     lib_base 
     $(TEST_SOURCES).cpp # Sources for the unit tests. 
    : # properties 
     <library>/site-config//boost/test 
    ; 

你做必須小心,沒有任何重要的勞動在你的DllMain gic中,但通常是a bad idea

相關問題