[C++]在Visual Studio 2010中使用Google Test - 配置
我主要是想使用單元測(cè)試,VS2010是有自己的單元測(cè)試的,雖然我不抵觸Microsoft的東西,但是自己做的非工業(yè)級(jí)的東西,去用Microsoft的解決方案是找罪受~所以使用了Google的測(cè)試方案。主要查閱了國(guó)外的一篇資料,雖然那位寫得實(shí)在簡(jiǎn)略,但寫得還是不錯(cuò)的,我補(bǔ)充梳理了一下。
下載部署GTest
首先去下載Google Test,網(wǎng)址為http://code.google.com/p/googletest/。我寫此文的時(shí)候是1.6版。
解壓之,因?yàn)橐磸?fù)使用,所以最好放到固定的目錄。我解壓到了D:\Selah\VSProjects\Source下。打開解壓后的目錄,結(jié)構(gòu)如下:
其中要接觸的目錄有:
../ - 即D:\Selah\VSProjects\Source\gtest-1.6.0,我把它設(shè)置為$(GTest),這樣就不用每次寫一長(zhǎng)串路徑了。
include - 包含目錄,里邊有頭文件,測(cè)試時(shí)要用到。
msvc - Visual Studio的項(xiàng)目工程文件,已經(jīng)配置好了的,用它生成二進(jìn)制庫(kù)。
運(yùn)行msvc下的gtest.sln文件,它會(huì)提示自動(dòng)升級(jí)為新的解決方案,然后生成即可。記得Debug和Release都要生成,分別用于測(cè)試Debug和Release方案的代碼。我使用的是以下4個(gè)文件,還可以使用另外一個(gè).sln文件,請(qǐng)自行文檔之~
msvc\gtest\Debug - Debug方案下的二進(jìn)制文件:gtestd.lib、gtest_maind.lib(注意主文件名的d后綴)
msvc\gtest\Release - Release方案下的二進(jìn)制文件:gtest.lib、gtest_main.lib
Solution配置
為了讓測(cè)試和程序運(yùn)行互不干擾,老外將待測(cè)試模塊和程序入口分離為兩個(gè)項(xiàng)目,這樣程序和GTest都可以訪問(wèn)待測(cè)試模塊,互不沖突。最簡(jiǎn)單的情況下,Solution下有3個(gè)Project:
BaseCode - 待測(cè)試模塊。我是要做單元測(cè)試的,所以頭文件里要包含信息。(比如你要測(cè)試void Foo(),起碼要在頭文件里Declare一下吧~)
RunBaseCode - 程序入口。就是將程序一分為二為兩部分。程序入口調(diào)用BaseCode生成的模塊,實(shí)現(xiàn)程序功能。
TestBaseCode - 測(cè)試程序。這個(gè)是書寫GTest測(cè)試用例的Project。除了要調(diào)用BaseCode生成的模塊(否則你測(cè)試個(gè)毛線啊)。并且,他還要調(diào)用GTest的模塊(否則你用毛線測(cè)試啊)。
另外就是路徑問(wèn)題,為了簡(jiǎn)便,我把路徑寫成了宏。宏保存在項(xiàng)目屬性表里,這個(gè)表除了可以保存宏,還能保存后邊提到的路徑,可以備份了下次直接用。
具體過(guò)程不說(shuō)了,這圖一看就懂吧,之后就可以使用$(GTest)代替那長(zhǎng)串路徑了。
?
Project - BaseCode配置
Debug/Release通用:
項(xiàng)目屬性 - 配置屬性 - 常規(guī): 配置類型 = 靜態(tài)庫(kù)(.lib)。你也可以用動(dòng)態(tài)庫(kù),不過(guò)要或重新編譯GTest,具體文檔之~靜態(tài)庫(kù)很好的,不要看不起他。
Debug:
項(xiàng)目屬性 - 配置屬性 - C/C++ - 代碼生成: 運(yùn)行庫(kù) = 多線程調(diào)試(/MTd)。如果不這么做,結(jié)果就是報(bào)錯(cuò)~
Release:
項(xiàng)目屬性 - 配置屬性 - C/C++ - 代碼生成: 運(yùn)行庫(kù) = 多線程(/MT)。如果不這么做,結(jié)果就是報(bào)錯(cuò)~
?
Project - RunBaseCode配置:
因?yàn)橐{(diào)用BaseCode的lib,所以配置一下項(xiàng)目依賴項(xiàng)(依賴BaseCode)。要不然,BaseCode還沒(méi)生成呢,就開始生成RunBaseCode,結(jié)果只能是報(bào)錯(cuò)。
Debug/Release通用:
項(xiàng)目屬性 - 通用屬性 - 框架和引用: 添加對(duì)BaseCode的引用。感覺(jué)和.Net的程序集引用有點(diǎn)像。如果不這么干(比如對(duì)此有很深的厭惡之情),可以配置附加庫(kù)路徑以及附加依賴項(xiàng)(配置TestBaseCode時(shí)有介紹)。
項(xiàng)目屬性 - 配置屬性 - C/C++ - 常規(guī): 附加包含目錄 += $(SolutionDir)\BaseCode。其實(shí)是可有可無(wú),如果設(shè)置了,引用頭文件可以使用:
#include <BaseCode.h>否則,就只能使用相對(duì)或者絕對(duì)路徑了:
#include "../BaseCode/BaseCode.hProject - TestBaseCode配置
除了和RunBaseCode相同的配置外(因?yàn)樗惨{(diào)用BaseCode.lib,重復(fù)工作我不寫了),還要進(jìn)行如下配置。
Debug/Release通用:
項(xiàng)目屬性 - 配置屬性 - C/C++ - 常規(guī): 附加包含目錄 += $(GTest)\include。這樣方便包含GTest的頭文件。
項(xiàng)目屬性 - 配置屬性 - 連接器 - 常規(guī): 附加庫(kù)目錄 += $(GTest)\msvc\gtest\$(IntDir)。如果之前沒(méi)有引用BaseCode,要在這里做類似設(shè)置。
Debug:
項(xiàng)目屬性 - 配置屬性 - C/C++ - 代碼生成: 運(yùn)行庫(kù) = 多線程調(diào)試(/MTd)。如果不這么做,結(jié)果就是報(bào)錯(cuò)~(和BaseCode的設(shè)置相同)
項(xiàng)目屬性 - 配置屬性 - 連接器 - 常規(guī): 附加依賴項(xiàng) += gtestd.lib;gtest_maind.lib。如果之前沒(méi)有引用BaseCode,要在這里做類似設(shè)置。
Release:
項(xiàng)目屬性 - 配置屬性 - C/C++ - 代碼生成: 運(yùn)行庫(kù) = 多線程(/MT)。如果不這么做,結(jié)果就是報(bào)錯(cuò)~(和BaseCode的設(shè)置相同)
項(xiàng)目屬性 - 配置屬性 - 連接器 - 常規(guī): 附加依賴項(xiàng) += gtest.lib;gtest_main.lib。
生成即測(cè)試
老外果然有思路。這樣配置了TestBaseCode,就不用執(zhí)行它了,每次生成解決方案,就會(huì)自動(dòng)執(zhí)行測(cè)試。
項(xiàng)目屬性 - 配置屬性 - 生成事件 - 后期生成事件: 命令行 = $(TargetDir)$(TargetFileName)。效果:
如果執(zhí)行測(cè)試的exe文件,會(huì)一閃而過(guò),可以放到cmd里邊執(zhí)行。效果還是不錯(cuò)的。Over~~
總結(jié)
以上是生活随笔為你收集整理的[C++]在Visual Studio 2010中使用Google Test - 配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 利用C语言创建和使用DLL文件
- 下一篇: Google C++单元测试框架(Gte