在 visual studio 2015 上使用
下载:https://github.com/google/googletest (压缩包)
编译gtest
使用VS2015打开gtest.sln(我的是在目录googletest-master\googletest\msvc\2010下)
在debug、release两个模式下都编译一下。编译后,在msvc/gtest/下有debug、release两个文件夹。(编译器报“不是有效的Win32应用程序”是正常现象)
创建测试项目
创建具体项目,之后右击工程名,点击“属性”,展开“配置属性——C/C++——常规”,在“附加包含目录”中添加“.\googletest-master\googletest\include”(省略部分为你下载时文件夹所放的路径, 即include目录的绝对路径);
展开“C/C++——代码生成”,在“运行库”中进行修改,这里的值应该和编译gtest时使用的值一致即可。
展开“链接器——输入”,在“附加依赖项”中添加编译gtest时生成的gtestd.lib,附加上正确的路径;
之后就可以编写你的第一个测试程序了。
有问题参考:
使用
断言
对检查点的检查:
1. EXPECT_* 失败时,案例继续往下执行。
2. ASSERT_* 失败时,直接在当前函数中返回,当前函数中ASSERT_*后面的语句将不会执行。
事件机制
gtest提供了多种事件机制,非常方便我们在案例之前或之后做一些操作。总结一下gtest的事件一共有3种:
全局的,所有案例执行前后。
TestSuite级别的,在某一批案例中第一个案例前,最后一个案例执行后。(应该是一个testcase对象执行前后执行)
TestCase级别的,每个TestCase前后。(应该是一个testcase对象中每个test对象的执行前后执行)
通过继承Test类,使用TEST_F宏,我们可以在案例之间共享一些通用方法,共享资源。使得我们的案例更加的简洁,清晰。
参数化
不用指定每个特殊值
死亡测试
测试程序是否会在某些输入的条件下如期挂了
运行参数
深入解析gtest
总结一下gtest里的几个关键的对象:
UnitTest 单例,总管整个测试,包括测试环境信息,当前执行状态等等。
UnitTestImpl UnitTest内部具体功能的实现者。
Test 我们自己编写的,或通过TEST,TEST_F等宏展开后的Test对象,管理着测试案例的前后事件,具体的执行代码TestBody。
TestCase 测试案例对象,管理着基于TestCase的前后事件,管理内部多个TestInfo。
TestInfo 管理着测试案例的基本信息,包括Test对象的创建方法。
TestInfoImpl TestInfo内部具体功能的实现者 。
使用一个链表结构存储TestCase对象。