2011-06-02 144 views
6

使用Visual Studio 2010 C++。我正在試驗單元測試,並決定嘗試Google Test(gtest)。我有一個編譯爲MFC可執行文件的現有項目(我也對如何測試編譯爲DLL的項目感興趣)。我對單元測試慣例的理解是,你應該爲你的測試創建一個新的獨立項目。所以我在單元測試的相同解決方案中創建了一個新項目。但我如何鏈接項目?我可以從我的測試項目中測試我的exe項目的任意函數/方法嗎?Visual Studio C++:谷歌測試的單元測試exe項目?

傳統的做法是什麼?

+0

相關問題基本上問我,當我搜索了這個問題並沒有發現同樣的事情:http://stackoverflow.com/questions/2680892/how-do-you-run-your-unit-tests-compiler-flags-static-libraries – User 2011-06-02 22:38:01

回答

6

將要測試的功能放到一個靜態庫中,該靜態庫鏈接到您的測試項目和您的MFC項目中,或者將您的文件放入這兩個項目中。首先是比較複雜的,但第二個將導致你編譯兩遍....

+0

第一種選擇是我們已經完成的工作,它運行良好。我認爲第二個選項會很快讓人煩惱,除了小的或很少變化的項目:) – Jan 2011-06-02 16:14:57

+0

你是什麼意思把文件放在這兩個項目?你是說在兩個項目中都有這些文件的副本,還是說你要在磁盤上將同一個文件添加到這兩個項目中? – User 2011-06-02 16:15:38

+0

@User我希望符號鏈接或硬鏈接 – alternative 2011-06-02 16:37:00

8

我認爲組織統一測試的最好辦法是:

  • 不要改變你的主要項目。結構應該獨立於您的測試行爲。在我看來,將你的項目改爲一個大的靜態庫和一個可執行文件實際上並不優雅。 相反,添加一個構建後操作來將所有obj文件聚合到一個靜態lib文件中,該文件將僅由您的測試項目使用。

  • 創建一個簡單的測試項目,鏈接到您的測試框架和先前生成的靜態庫。

  • 享受。

主要優點是您不需要觸摸您想測試的項目,也不需要將所有源代碼包含到測試項目中。

要看看你能怎麼辦,對於Visual Studio中,你可以看到這個帖子:Linking to multiple .obj for unit testing a console application

2

我已經準備了一個GitHub庫包括比利的回答parralel的Visual Studio 2015年解決方案。您可以直接使用它,而無需任何額外的要求或依賴性。

https://github.com/fuatcoskun/GoogleTestVS2015

我希望它可以幫助...

+0

當我建立這個時,我看不到輸出。有什麼想法嗎?我需要在某處添加一個getchar()來暫停輸出嗎? – JC203 2017-03-09 16:20:55