使用gtest對DLL工程進行單元測試的實踐


前言

關於單元測試的重要性、gtest的優缺點等就不說了。之前項目是沒有做單元測試的,在VS的解決方案中,只有一個可執行的工程,其他的工程都是以DLL庫的形式提供。本文只針對使用VS對DLL庫進行單元測試,做一些記錄。

 

下載編譯gtest

下載gtest不多說,下載什么版本也沒太大關系,我下載的是1.7版。在Windows下編譯gtest步驟:

(1)將gtest-1.7.0.zip進行解壓縮;

(2)用vs打開msvc目錄下的gtest.sln工程,需要進行轉換編譯器;

(3)打開后有四個工程gtest、gtest_main、gtest_prod_test、gtest_unittest;

(4)由於單元測試一般在Debug模式下進行,只需在Debug下編譯gtest工程即可,會在msvc/gtest/Debug下生成gtestd.lib庫。

 

新增Gtest_Debug模式

原來工程中已經包含Debug和Release模式,為了不影響以前的工程的使用,專門添加一個Gtest_Debug模式,用於做單元測試。步驟如下

 

 

按確定后,會生成對應的Gtest_Debug模式。這時候,可以使用新建的Gtest_Debug編譯一把,看能不能編譯成功,生成的文件和原來的Debug模式是一模一樣的。

 

 

 

部署Gtest頭文件與庫

 (1)把解壓出來的gtest頭文件目錄拷貝到項目原有的include目錄

(2)把編譯出來的gtestd.lib拷貝到項目的Debug模式生成的目錄

 

改造原代碼,添加Gtest的main函數

因為每個實現文件都會包含stdafx.h,避免每個單元測試的實現文件都要添加gtest的頭文件,所以在此頭文件中添加如下代碼。其中GTEST_DEBUG這個宏是前面步驟添加的,這段代碼只有在Gtest_Debug模式下才會有效。

1 #ifdef GTEST_DEBUG 2 #include "gtest/gtest.h"
3 #pragma comment(lib, "gtestd.lib")
4 #endif

由於把DLL庫改為exe應用程序,所以需要添加main函數,以便執行gtest的用例。在工程中新建一個GtestMain.cpp文件,添加如下代碼(主要是main函數的實現,用例是用於測試是否成功的)。

 1 #include "stdafx.h"
 2 
 3 #ifdef GTEST_DEBUG      // 這段代碼只能在Gtest_Debug模式下運行
 4 
 5 int add(int a, int b)  6 {  7     return a + b;  8 }  9 
10 TEST(fun, add) 11 { 12     EXPECT_EQ(1, add(2, -1)); 13     EXPECT_EQ(5, add(2, 3)); 14 } 15 
16 int main(int argc, wchar_t* argv[]) 17 { 18     testing::InitGoogleTest(&argc, argv); 19     return RUN_ALL_TESTS(); 20 } 21 
22 #endif

重新編譯工程,會發現工程生成的是exe程序,而不再是DLL程序,把工程設置為啟動項目,執行程序即可看到測試結果。

 

編譯測試用例

建議在工程目錄下專門建一個test的目錄,用於存放測試用例的文件,測試用例的文件和實際工程代碼都可以加入到VS工程中。所有的測試用例代碼都需要用#ifdef GTEST_DEBUG ... #endif來括起來,以便與實際的工程代碼隔離。

 

 參考

使用gtest給DLL工程編寫單元測試

http://blog.csdn.net/sogouauto/article/details/47731523

 

gtest簡介及簡單使用

http://blog.csdn.net/fengbingchun/article/details/39667571

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM