【发布时间】:2010-10-06 15:01:47
【问题描述】:
网站上没有记录,人们似乎在设置框架时遇到了问题。有人可以展示示例项目设置的分步介绍吗?
【问题讨论】:
-
很高兴有人问...
标签: c++ visual-studio unit-testing visual-studio-2005 googletest
网站上没有记录,人们似乎在设置框架时遇到了问题。有人可以展示示例项目设置的分步介绍吗?
【问题讨论】:
标签: c++ visual-studio unit-testing visual-studio-2005 googletest
(这些说明使测试框架适用于 Debug 配置。将相同的过程应用于 Release 配置应该很简单。)
获取 Google C++ 测试框架
C:\gtest
构建框架库
C:\gtest\msvc\gtest.sln
创建和配置您的测试项目
C:\gtest\include
C:\gtest\msvc\gtest\Debug 或 C:\gtest\msvc\gtest-md\Debug,具体取决于 gtestd.lib 的位置gtestd.lib
验证一切正常
main() 函数的测试项目中打开 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
}
调试 > 开始调试
如果一切正常,您应该会看到控制台窗口出现并显示单元测试结果。
【讨论】:
Arlaharen 所说的基本上是正确的,只是他省略了解释链接器错误的部分。首先,您需要构建您的应用程序没有 CRT 作为运行时库。无论如何,您应该始终这样做,因为它确实简化了您的应用程序的分发。如果您不这样做,那么您的所有用户都需要安装 Visual C++ 运行时库,而那些不这样做的用户会抱怨他们的系统上缺少神秘的 DLL……因为链接需要额外的几百 KB静态 CRT,您可以在以后获得支持时省去很多麻烦(相信我,我已经通过艰难的方式学会了它!)。
无论如何,要做到这一点,你去目标的属性 -> C/C++ -> 代码生成 -> 运行时库,它需要为你的发布版本设置为“多线程”和“多线程” Debug”为您的调试版本。
由于 gtest 库是以相同的方式构建的,因此您需要确保链接到正确版本的 it,否则链接器将拉入运行时库的另一个副本,这是您看到的错误(顺便说一句,无论您是否使用 MFC,这都不应该有所作为)。您需要将 gtest 构建为 Debug 和 Release 模式并保留两个副本。然后,您在 Release 构建中链接 gtest.lib/gtest_main.lib,在 Debug 构建中链接 gtestd.lib/gtest_maind.lib。
此外,您需要确保您的应用程序指向存储 gtest 头文件的目录(在属性 -> C/C++ -> 常规 -> 附加包含目录中),但如果遇到链接器错误,我假设您已经设法使这部分正确,否则您首先要处理更多的编译器错误。
【讨论】:
我做了一个关于设置的视频教程: http://www.youtube.com/watch?v=mzSzwQOmMRs
【讨论】:
构建了 gtest,这就是我所做的:
之后,我只是根据需要使用 TEST 或 TEST_F 编写测试,并将它们与我的 main 函数一起编译:
int main(int argc, char** argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
【讨论】:
gtest_main.lib 包含默认的main 函数,因此如果您明确编写了自己的main,您可能不想包含它。
如果您不想编写自己的 main() 进行测试,您可以使用 gtest_main.lib 中定义的 main() 函数,但在 VS2012 中会出现链接器错误“必须定义入口点”。 在您的测试项目中,将 ProjectProperties->Linker->System->SubSystem 设置为“Console”,因为这将强制 VS2012 寻找一个名为“main()”的入口点,并将在 gtest_main.lib 中找到它(前提是您已链接它正确)。
【讨论】:
在 Microsoft Visual Studio 中,错误配置的运行时库类型会导致链接错误。
VS 2005(和 2008)默认使用多线程 DLL 或多线程调试 DLL。 但 Google 测试库默认使用多线程或多线程调试运行时。
所以,为谷歌测试库选择合适的运行时库类型。 (在配置属性 -> 代码生成 -> 运行时库中)。
【讨论】: