如何在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框架

  1. 下载最新的gtest框架
  2. 解压到C:\gtest

构build框架库

  1. 在Visual Studio中打开C:\gtest\msvc\gtest.sln
  2. 将configuration设置为“debugging”
  3. 构build解决scheme

创build和configuration您的testing项目

  1. 创build一个新的解决scheme,并select模板Visual C ++> Win32> Win32控制台应用程序
  2. 右键单击新创build的项目,然后select“属性”
  3. 将configuration更改为debugging。
  4. configuration属性> C / C ++>常规>其他包含目录:添加C:\gtest\include
  5. configuration属性> C / C ++>代码生成>运行库:如果您的代码链接到运行时DLL,请selectmultithreadingdebuggingDLL(/ MDd)。 如果不是,请selectmultithreadingdebugging(/ MTd)。
  6. configuration属性>链接器>常规>其他库目录:添加C:\gtest\msvc\gtest\Debug或者C:\gtest\msvc\gtest-md\Debug ,具体取决于gtestd.lib的位置
  7. configuration属性>链接器>input>其他依赖项:添加gtestd.lib

validation一切正常

  1. 在包含main()函数的testing项目中打开cpp。
  2. 粘贴以下代码:

     #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 } 
  3. 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之后,这就是我所做的:

  1. 将\ mypath \ gtest-1.0.1 \ Debug(或Release)添加到Common Properties-> Linker-> General-> Additional Library Directories
  2. 将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属性 – >代码生成 – >运行时库)。