googletest入门
1、Windows上编译生成gtest.lib静态库
1.1、首先在github上下载Googletest1.8.0版本
https://github.com/google/googletest/releases/tag/release-1.8.0
1.2、解压并创建build目录
1.3、使用cmake gui生成sln等文件
这里选择本地vs的版本,根据最终使用vs生成对应的gtest.lib等静态库。
2、概念的描述和simple demo
详细文档:https://google.github.io/googletest/primer.html
2.1、Test,Test Suite,Test Case
google一开始也是使用的TestCase术语(term)来组织相关的测试用例,一些(ISTQB)组织和其他的书籍中使用Test Suite这个术语(term)。
2.2、基本概念
使用googletest,我们通过写断言(assertions)语句来检测一个条件是否为true。一个断言的结果可以是成功,非致命失败,致命失败。如果一个致命失败发生,它会中断当前函数,否者程序继续正常运行。
Tests使用断言来验证被测试代码的行为,如果一个测试crash了它会失败;否则就是成功。
一个Test Suite包含一个或多个测试用例。我们可以组织一个测试用例进入到一个TestSuite中。当多个测试用例在一个test suite中共享一个对象或子进程时,可以将它们放入到test fixture类中。
一个测试程序可以包含多个test suites。
2.3、ASSERT和EXPECT选择
2.3.1、ASSERT
如果测试用例失败了它会生成致命错误并终止当前函数;
2.3.2、EXPECT
EXPECT会生成非致命错误,不会终止当前函数。通常情况下EXPECT更好有点,允许一个测试中出现多处错误。但是如果问题出现时再继续没有意义就可以使用ASSERT。
2.3.3、自定义异常描述
ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length";
for (int i = 0; i < x.size(); ++i) {
EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
}
如果是wchar这种类型,会被自动转成utf8的。
2.4、simple demo
#include <gtest\gtest.h>
int Factorial(int n)
{
return n + 1;
}
TEST(FactorialTest, HandlesZeroInput){
EXPECT_EQ(Factorial(0), 1);
}
TEST(FactorialTest, HandlesPositiveInput){
EXPECT_EQ(Factorial(0), 1);
EXPECT_EQ(Factorial(1), 1);
EXPECT_EQ(Factorial(2), 2);
EXPECT_EQ(Factorial(3), 6);
}
int main(int argc,char**argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
test fixture使用TEST_F()详见https://google.github.io/googletest/primer.html