kna*_*ser 81 c++ unit-testing visual-studio-2005 googletest visual-studio
它没有记录在网站上,人们似乎在设置框架时遇到了问题.有人可以逐步介绍示例项目设置.
mtl*_*nch 103
(这些指令使测试框架适用于Debug配置.将相同的进程应用于Release配置应该是非常简单的.)
获取Google C++测试框架
C:\gtest构建框架库
C:\gtest\msvc\gtest.sln在Visual Studio中打开创建和配置您的测试项目
C:\gtest\includeC:\gtest\msvc\gtest\Debug或C:\gtest\msvc\gtest-md\Debug,取决于gtestd.lib的位置gtestd.lib验证一切正常
main()功能的Test Project中打开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
}
Run Code Online (Sandbox Code Playgroud)调试>开始调试
如果一切正常,您应该会看到控制台窗口出现并显示单元测试结果.
Nik*_*man 43
Arlaharen说的基本上是正确的,除了他遗漏了解释你的链接器错误的部分.首先,您需要在没有 CRT作为运行时库的情况下构建应用程序.无论如何,您应该始终这样做,因为它确实简化了应用程序的分发.如果你不这样做,那么你的所有用户都需要安装Visual C++运行时库,那些不需要的人会抱怨他们的系统中缺少神秘的DLL ...需要额外的几百千字节来链接CRT静态地,你以后在支持中省去了很多头痛(相信我这一点 - 我已经很难学到了!).
无论如何,要执行此操作,您将转到目标的属性 - > C/C++ - >代码生成 - >运行时库,并且需要将其设置为"多线程"以用于发布版本和"多线程调试"你的Debug构建.
由于gtest库是以相同的方式构建的,因此您需要确保链接到它的正确版本,否则链接器将引入运行时库的另一个副本,这是您看到的错误(顺便说一下,这个如果你使用MFC,不应该有所作为).您需要将gtest构建为Debug和Release模式并保留两个副本.然后,在Release版本中链接gtest.lib/gtest_main.lib,在Debug版本中链接gtestd.lib/gtest_maind.lib.
此外,您需要确保您的应用程序指向存储gtest头文件的目录(在属性 - > C/C++ - >常规 - >其他包含目录中),但如果您遇到链接器错误,我假设您已经设法使这部分正确,否则您将有更多的编译器错误首先处理.
构建 gtest 后,这就是我所做的:
之后,我只是根据需要使用 TEST 或 TEST_F 编写我的测试,并将它们与我的主函数一起编译:
int main(int argc, char** argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)
如果您不想为测试编写自己的main(),可以使用gtest_main.lib中定义的main()函数,但是在VS2012中会出现链接器错误"必须定义入口点".在您的测试项目中将ProjectProperties-> Linker-> System-> SubSystem设置为"Console",因为这会强制VS2012查找名为"main()"的入口点,并在gtest_main.lib中找到它(如果已链接)它正确).