use google test on vs2017
程序员文章站
2022-07-02 19:18:44
...
前言
给chromium回调加了一个参数后,在base::PostTaskAndReplyWithResult()处编译不过了,根据报错提示,看不出来哪写错了…
看到chromium自带的gtest测试工程中,有base::PostTaskAndReplyWithResult()的测试用例。
先学习一下 google test的基本用法。
做完gtest的基础实验后,感觉gtest用起来还是挺方便的,上手快,用法也相当简洁,有大厂的范。
实验效果
hello google test from d:\ls\study\helper\test_google_test\src\hello_gooogle_test\hello_gooogle_test.cpp
[==========] Running 14 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 7 tests from case_name_a
[ RUN ] case_name_a.test_name_1
[ OK ] case_name_a.test_name_1 (0 ms)
[ RUN ] case_name_a.test_name_2
[ OK ] case_name_a.test_name_2 (0 ms)
[ RUN ] case_name_a.test_name_3
[ OK ] case_name_a.test_name_3 (0 ms)
[ RUN ] case_name_a.test_name_4
[ OK ] case_name_a.test_name_4 (0 ms)
[ RUN ] case_name_a.test_name_5
[ OK ] case_name_a.test_name_5 (0 ms)
[ RUN ] case_name_a.test_name_err
d:\ls\study\helper\test_google_test\src\hello_gooogle_test\hello_gooogle_test.cpp(33): error: Expected: (1) >= (2), actual: 1 vs 2
[ FAILED ] case_name_a.test_name_err (2 ms)
[ RUN ] case_name_a.test_name_6
[ OK ] case_name_a.test_name_6 (0 ms)
[----------] 7 tests from case_name_a (10 ms total)
[----------] 7 tests from case_name_b
[ RUN ] case_name_b.test_name_11
[ OK ] case_name_b.test_name_11 (0 ms)
[ RUN ] case_name_b.test_name_2
[ OK ] case_name_b.test_name_2 (0 ms)
[ RUN ] case_name_b.test_name_3
[ OK ] case_name_b.test_name_3 (0 ms)
[ RUN ] case_name_b.test_name_4
[ OK ] case_name_b.test_name_4 (0 ms)
[ RUN ] case_name_b.test_name_5
[ OK ] case_name_b.test_name_5 (0 ms)
[ RUN ] case_name_b.test_name_err
d:\ls\study\helper\test_google_test\src\hello_gooogle_test\hello_gooogle_test.cpp(62): error: Expected: (1) >= (2), actual: 1 vs 2
[ FAILED ] case_name_b.test_name_err (3 ms)
[ RUN ] case_name_b.test_name_6
[ OK ] case_name_b.test_name_6 (0 ms)
[----------] 7 tests from case_name_b (11 ms total)
[----------] Global test environment tear-down
[==========] 14 tests from 2 test cases ran. (25 ms total)
[ PASSED ] 12 tests.
[ FAILED ] 2 tests, listed below:
[ FAILED ] case_name_a.test_name_err
[ FAILED ] case_name_b.test_name_err
2 FAILED TESTS
D:\ls\study\helper\test_google_test\src\hello_gooogle_test\Debug\hello_gooogle_test.exe (进程 723528)已退出,返回代码为: 1。
若要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口...
实验工程下载点
src_test_google_test_v1_8_1.7z
实验工程包括:
- gtest1.8.1原版压缩包
- 编译好的所有静态库(md/no-md + debug/release + x86/x64) + 提出来的gtest头文件
- 实验工程一个
实验
编译准备
gtest的发布版本
https://github.com/google/googletest/releases
https://github.com/google/googletest/archive/release-1.8.1.zip
cd D:\ls\study\helper\test_google_test\doc\googletest-release-1.8.1\googletest\msvc\2010
gtest.sln or gtest-md.sln
选择gtest.sln, 用vs2017打开升级工具链, 只需要编译gtest静态库, 将能编译的选项组合都编译出来如下:
googletest-release-1.8.1\googletest\msvc\2010\gtest\x64-Debug\gtestd.lib
googletest-release-1.8.1\googletest\msvc\2010\gtest\Win32-Debug\gtestd.lib
googletest-release-1.8.1\googletest\msvc\2010\gtest\Win32-Release\gtest.lib
googletest-release-1.8.1\googletest\msvc\2010\gtest\x64-Release\gtest.lib
选择gtest-md.sln, 用vs2017打开升级工具链, 只需要编译gtest-md静态库, 将能编译的选项组合都编译出来如下:
googletest-release-1.8.1\googletest\msvc\2010\gtest-md\Win32-Debug\gtestd.lib
googletest-release-1.8.1\googletest\msvc\2010\gtest-md\x64-Debug\gtestd.lib
googletest-release-1.8.1\googletest\msvc\2010\gtest-md\Win32-Release\gtest.lib
googletest-release-1.8.1\googletest\msvc\2010\gtest-md\x64-Release\gtest.lib
新建一个控制台工程
将头文件googletest-release-1.8.1\googletest\include\gtest拷贝到工程目录下的inc目录
将上面生成的库文件拷贝到工程目录下的lib目录,将非.lib文件都删掉
添加预编译宏: _VARIADIC_MAX=10
开始写测试程序
测试工程实现
主程序写法固定,就2句,不用动。
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
在测试用例中,按照自己的逻辑得出bool的结果,用 ASSERT_X或EXPECT_X来比较结果是否正确即可.
增加新的测试用例就行。
TEST(case_name_x, test_name_x) {
EXPECT_X(value_want, value_by_calculate);
}
我的测试工程,用来演示ASSERT_X或EXPECT_X的用法.
// @file hello_gooogle_test.cpp
// @brief edit on vs2017, use google test 1.8.1 static lib
#include "pch.h" // vs2017 default setting need include pch.h
// 设置./;../inc/为附加包含路径
#include "gtest/gtest.h"
// 在Debug + x86 下要包含的库
#pragma comment(lib, "../lib/gtest-md/Win32-Debug/gtestd.lib")
TEST(case_name_a, test_name_1) {
EXPECT_EQ(0, 0); // ==
}
TEST(case_name_a, test_name_2) {
EXPECT_NE(0, 1); // !=
}
TEST(case_name_a, test_name_3) {
EXPECT_LT(1, 2); // <
}
TEST(case_name_a, test_name_4) {
EXPECT_LE(1, 2); // <=
}
TEST(case_name_a, test_name_5) {
EXPECT_GT(2, 1); // >
}
TEST(case_name_a, test_name_err) {
EXPECT_GE(1, 2); // err
}
TEST(case_name_a, test_name_6) {
EXPECT_GE(2, 1); // >=
}
// ASSERT_X 和 EXPECT_X 效果相同
TEST(case_name_b, test_name_11) {
ASSERT_EQ(0, 0); // ==
}
TEST(case_name_b, test_name_2) {
ASSERT_NE(0, 1); // !=
}
TEST(case_name_b, test_name_3) {
ASSERT_LT(1, 2); // <
}
TEST(case_name_b, test_name_4) {
ASSERT_LE(1, 2); // <=
}
TEST(case_name_b, test_name_5) {
ASSERT_GT(2, 1); // >
}
TEST(case_name_b, test_name_err) {
ASSERT_GE(1, 2); // err
}
TEST(case_name_b, test_name_6) {
ASSERT_GE(2, 1); // >=
}
// main函数之前就写各种case了, mian函数就这样, 不动了
int main(int argc, char** argv)
{
printf("hello google test from %s\n", __FILE__);
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
return EXIT_SUCCESS;
}
上一篇: 一、搭建node.js开发环境
下一篇: 微信小程序-评教系统(教师页面)