如何在Visual Studio 2005上设置Google C ++testing框架(gtest)
它没有logging在网站上,人们似乎在设置框架时遇到了问题。 有人可以请一步一步地介绍一个示例项目设置。
Arlaharen说的基本上是正确的,除了他没有解释链接器错误的部分。 首先,你需要build立你的应用程序, 而不用 CRT作为运行时库。 无论如何,您应该始终这样做,因为它确实简化了您的应用程序的分发。 如果你不这样做,那么你所有的用户都需要安装Visual C ++ Runtime Library,而那些不会抱怨在他们的系统上丢失了神秘的DLL …对于额外的几百千字节,它需要链接在静态的CRT上,你为自己节省了很多头疼的问题(相信我这一点 – 我已经很难学到了)。
无论如何,要做到这一点,你去目标的属性 – > C / C ++ – >代码生成 – >运行时库,它需要设置为“multithreading”您的发布版本和“multithreadingdebugging”为您的debugging版本。
由于gtest库是以相同的方式构build的,所以您需要确保链接到正确版本的链接器,否则链接器将会拉入运行时库的另一个副本,这是您看到的错误(btw,this如果你使用的是MFC,不应该有所作为)。 您需要将gtest作为“ debugging”和“发行”模式构build,并保留两个副本。 然后,您可以在您的Release版本中链接gtest.lib / gtest_main.lib,在Debug版本中链接到gtestd.lib / gtest_maind.lib。
此外,您需要确保您的应用程序指向存储gtest头文件的目录(属性 – > C / C ++ – > General – > Additional Include Directories),但是如果遇到链接器错误,我认为你已经设法使这个部分正确,否则你会有更多的编译错误来处理。
(这些指令使得testing框架可以用于Debugconfiguration,对Releaseconfiguration应用相同的过程应该是相当简单的。)
获取Google C ++testing框架
- 下载最新的gtest框架
- 解压到
C:\gtest
构build框架库
- 在Visual Studio中打开
C:\gtest\msvc\gtest.sln
- 将configuration设置为“debugging”
- 构build解决scheme
创build和configuration您的testing项目
- 创build一个新的解决scheme,并select模板Visual C ++> Win32> Win32控制台应用程序
- 右键单击新创build的项目,然后select“属性”
- 将configuration更改为debugging。
- configuration属性> C / C ++>常规>其他包含目录:添加
C:\gtest\include
- configuration属性> C / C ++>代码生成>运行库:如果您的代码链接到运行时DLL,请selectmultithreadingdebuggingDLL(/ MDd)。 如果不是,请selectmultithreadingdebugging(/ MTd)。
- configuration属性>链接器>常规>其他库目录:添加
C:\gtest\msvc\gtest\Debug
或者C:\gtest\msvc\gtest-md\Debug
,具体取决于gtestd.lib的位置 - configuration属性>链接器>input>其他依赖项:添加
gtestd.lib
validation一切正常
- 在包含
main()
函数的testing项目中打开cpp。 -
粘贴以下代码:
#include "stdafx.h" #include <iostream> #include "gtest/gtest.h" TEST(sample_test_case, sample_test) { EXPECT_EQ(1, 1); } int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); RUN_ALL_TESTS(); std::getchar(); // keep console window open until Return keystroke }
-
debugging>开始debugging
如果一切正常,您应该看到控制台窗口出现并显示unit testing结果。
我做了关于设置的video教程: http : //www.youtube.com/watch?v = mzSzwQOmMRs
如果您不想编写自己的main()来进行testing,那么可以使用gtest_main.lib中定义的main()函数,但是在VS2012中会出现链接器错误“入口点必须被定义”。 在你的testing项目中设置ProjectProperties-> Linker-> System-> SubSystem为“Console”,因为这将迫使VS2012寻找一个名为“main()”的入口点,并将在gtest_main.lib中find它它在正确的)。
build立了gtest之后,这就是我所做的:
- 将\ mypath \ gtest-1.0.1 \ Debug(或Release)添加到Common Properties-> Linker-> General-> Additional Library Directories
- 将gtest.lib和gtest_main.lib添加到Common Properties-> Linker-> Input-> Additional Dependencies
之后,我只是使用TEST或TEST_F来编写我的testing,并将其与我的主要function一起编译:
int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
在Microsoft Visual Studio中,configuration错误的运行时库types会导致链接错误。
VS 2005(和2008)默认使用multithreadingDLL或multithreadingdebuggingDLL。 但Googletesting库默认使用Mulithreaded或Mulithreadeddebugging运行时。
因此,为Googletesting库select适当的运行时库types。 (在configuration属性 – >代码生成 – >运行时库)。