GoogleTest 是一个由 Google 的测试技术团队开发的测试框架,它考虑到了谷歌的特定需求和限制。无论你使用的是 Linux、Windows 还是 Mac,只要你编写 C++ 代码,GoogleTest 都可以帮到你。它支持任何类型的测试,不只是单元测试。
1.测试应该是独立的且可重复的。调试由于其它测试而成功或失败的测试是令人痛苦的,googletest通过在不同的对象上运行每个测试用例来隔离测试。当测试失败时,googletest允许你单独运行它,以便快速调试。
2.测试应该得到良好的组织,并反映测试代码的结构。googletest将相关的测试分组为测试套件,它们可以共享数据和子例程。这种常见的模式很容易接受,并且使测试很容易维护。这样的一致性在人们切换项目并开始工作在一个新的代码库上时尤其有用。
3.测试应该是可移植的且可复用的。Google 具有大量的平台无关的代码,它的测试也应该是平台无关的。googletest适用于不同的操作系统,不同的编译器,有异常或没有异常,所以 googletest测试可以使用多种配置。
4.当测试失败时,它们应该提供尽可能多的关于故障的信息。googletest 不会在第一个测试失败时停止。相反,它仅停止当前的测试并继续运行下一个。你还可以设置测试报告非致命故障,在此之后,当前测试将继续运行。这样,你可以在一个运行-编辑-编译周期中探测并解决多个 bug。
5.测试框架应该将测试编写者从家务活中解放出来,并让他们将精力集中在测试内容上。googletest 自动追踪所有定义的测试,且无需用户以运行它们的顺序迭代它们。 6.测试要快。通过 googletest,你可以跨测试用例复用共享资源,且只支付(执行)一次 set-up/tear-down 的开销,不使测试相互依赖。
配置googletest库的输出安装目录位置:
因为模式是:C:/Program Files/googletest-distribution,为了便于管理,统一讲安装文件放置在一个特定的位置,
作者放置在:如下位置,
为了进一步了解googletest,可以勾选以下选项;
然后点击config,再次点击generate,则生成了可以用vs2017打开的工程文件。
用vs2017打开如下:
如果勾选了googletest-buildtest,example,则会生成更火的测试项目;
当前默认为Debug配置:
然后,执行”All_BUILD“, : 通过点击菜单”生成---> 生成工程解决方案“
这样,生成工程64个项目,如下。
切换Release模式,仅需生成All_build,
然后,讲生成的googletest,安装InSTALL到指定目录位置。
由于当前配置为Release,因此安装的是Relsea版本的googletest相关库文件(编译好的),如下:
这样在目录生成用于googletest的打包好的相关文件:D:\INSTALLED_LIBS\googletest_install_x64
注意:如果没有提前配置CMake的CMAKE_BUILD_PREFIX, 则需要”以管理员的身份“打开googlet-test-distribut.sln文件,因为在执行INSTALL , 过程中给,需要向c:/pgroagm filies/ googletest中拷贝生成的文件,因此需要有管理员的权限。由于此处不是在C盘,尔仕D盘,因此,很方便直接执行install (在InSTLALL项目右键点击生成即可
)
│ │ │ │ gmock-
actions.h
│ │ │ │ gmock
-
cardinalities.h
│ │ │ │ gmock
-function-
mocker.h
│ │ │ │ gmock
-
matchers.h
│ │ │ │ gmock
-more-
actions.h
│ │ │ │ gmock
-more-
matchers.h
│ │ │ │ gmock
-nice-
strict.h
│ │ │ │ gmock
-spec-
builders.h
│ │ │ │ gmock.h
│ │ │ │
│ │ │ └─internal
│ │ │ │ gmock
-internal-
utils.h
│ │ │ │ gmock
-
port.h
│ │ │ │ gmock
-
pp.h
│ │ │ │
│ │ │ └─custom
│ │ │ gmock
-generated-
actions.h
│ │ │ gmock
-
matchers.h
│ │ │ gmock
-
port.h
│ │ │ README.md
│ │ │
│ │ └─gtest
│ │ │ gtest
-assertion-
result.h
│ │ │ gtest
-death-
test.h
│ │ │ gtest
-
matchers.h
│ │ │ gtest
-
message.h
│ │ │ gtest
-param-
test.h
│ │ │ gtest
-
printers.h
│ │ │ gtest
-
spi.h
│ │ │ gtest
-test-
part.h
│ │ │ gtest
-typed-
test.h
│ │ │ gtest.h
│ │ │ gtest_pred_impl.h
│ │ │ gtest_prod.h
│ │ │
│ │ └─internal
│ │ │ gtest
-death-test-
internal.h
│ │ │ gtest
-
filepath.h
│ │ │ gtest
-
internal.h
│ │ │ gtest
-param-
util.h
│ │ │ gtest
-port-
arch.h
│ │ │ gtest
-
port.h
│ │ │ gtest
-
string.h
│ │ │ gtest
-type-
util.h
│ │ │
│ │ └─custom
│ │ gtest
-
port.h
│ │ gtest
-
printers.h
│ │ gtest.h
│ │ README.md
│ └─lib
│ │ gmock.lib
│ │ gmockpdb_debug_postfix
-
NOTFOUND.pdb
│ │ gmock_main.lib
│ │ gmock_mainpdb_debug_postfix
-
NOTFOUND.pdb
│ │ gtest.lib
│ │ gtestpdb_debug_postfix
-
NOTFOUND.pdb
│ │ gtest_main.lib
│ │ gtest_mainpdb_debug_postfix
-
NOTFOUND.pdb
│ │
│ ├─cmake
│ │ └─GTest
│ │ GTestConfig.cmake
│ │ GTestConfigVersion.cmake
│ │ GTestTargets
-
debug.cmake
│ │ GTestTargets.cmake
│ │
│ └─pkgconfig
│ gmock.pc
│ gmock_main.pc
│ gtest.pc
│ gtest_main.pc
└─googletest_release
├─include
│ ├─gmock
│ │ │ gmock
-
actions.h
│ │ │ gmock
-
cardinalities.h
│ │ │ gmock
-function-
mocker.h
│ │ │ gmock
-
matchers.h
│ │ │ gmock
-more-
actions.h
│ │ │ gmock
-more-
matchers.h
│ │ │ gmock
-nice-
strict.h
│ │ │ gmock
-spec-
builders.h
│ │ │ gmock.h
│ │ │
│ │ └─internal
│ │ │ gmock
-internal-
utils.h
│ │ │ gmock
-
port.h
│ │ │ gmock
-
pp.h
│ │ │
│ │ └─custom
│ │ gmock
-generated-
actions.h
│ │ gmock
-
matchers.h
│ │ gmock
-
port.h
│ │ README.md
│ └─gtest
│ │ gtest
-assertion-
result.h
│ │ gtest
-death-
test.h
│ │ gtest
-
matchers.h
│ │ gtest
-
message.h
│ │ gtest
-param-
test.h
│ │ gtest
-
printers.h
│ │ gtest
-
spi.h
│ │ gtest
-test-
part.h
│ │ gtest
-typed-
test.h
│ │ gtest.h
│ │ gtest_pred_impl.h
│ │ gtest_prod.h
│ │
│ └─internal
│ │ gtest
-death-test-
internal.h
│ │ gtest
-
filepath.h
│ │ gtest
-
internal.h
│ │ gtest
-param-
util.h
│ │ gtest
-port-
arch.h
│ │ gtest
-
port.h
│ │ gtest
-
string.h
│ │ gtest
-type-
util.h
│ │
│ └─custom
│ gtest
-
port.h
│ gtest
-
printers.h
│ gtest.h
│ README.md
└─lib
│ gmock.lib
│ gmock_main.lib
│ gtest.lib
│ gtest_main.lib
├─cmake
│ └─GTest
│ GTestConfig.cmake
│ GTestConfigVersion.cmake
│ GTestTargets
-
release.cmake
│ GTestTargets.cmake
└─pkgconfig
gmock.pc
gmock_main.pc
gtest.pc
gtest_main.pc
同理,在RUN_TEST项目中,点击鼠标右键”生成“则可自动执行项目,如下
输出内容:
1>------ 已启动生成: 项目: RUN_TESTS, 配置: Debug x64 ------
1>Test project E:/Lib_GoogleTest/googletest-main/Build
1> Start 1: googletest-death-test-test
1> 1/45 Test #1: googletest-death-test-test ................. Passed 1.19 sec
1> Start 2: gtest_environment_test
1> 2/45 Test #2: gtest_environment_test ..................... Passed 0.26 sec
1> Start 3: googletest-filepath-test
1> 3/45 Test #3: googletest-filepath-test ................... Passed 0.28 sec
1> Start 4: googletest-listener-test
1> 4/45 Test #4: googletest-listener-test ................... Passed 0.25 sec
1> Start 5: gtest_main_unittest
1> 5/45 Test #5: gtest_main_unittest ........................ Passed 0.24 sec
1> Start 6: googletest-message-test
1> 6/45 Test #6: googletest-message-test .................... Passed 0.26 sec
1> Start 7: gtest_no_test_unittest
1> 7/45 Test #7: gtest_no_test_unittest ..................... Passed 0.24 sec
1> Start 8: googletest-options-test
1> 8/45 Test #8: googletest-options-test .................... Passed 0.25 sec
1> Start 9: googletest-param-test-test
1> 9/45 Test #9: googletest-param-test-test ................. Passed 0.32 sec
1> Start 10: googletest-port-test
1>10/45 Test #10: googletest-port-test ....................... Passed 4.35 sec
1> Start 11: gtest_pred_impl_unittest
1>11/45 Test #11: gtest_pred_impl_unittest ................... Passed 0.30 sec
1> Start 12: gtest_premature_exit_test
1>12/45 Test #12: gtest_premature_exit_test .................. Passed 0.24 sec
1> Start 13: googletest-printers-test
1>13/45 Test #13: googletest-printers-test ................... Passed 0.30 sec
1> Start 14: gtest_prod_test
1>14/45 Test #14: gtest_prod_test ............................ Passed 0.24 sec
1> Start 15: gtest_repeat_test
1>15/45 Test #15: gtest_repeat_test .......................... Passed 0.39 sec
1> Start 16: gtest_sole_header_test
1>16/45 Test #16: gtest_sole_header_test ..................... Passed 0.25 sec
1> Start 17: gtest_stress_test
1>17/45 Test #17: gtest_stress_test .......................... Passed 1.08 sec
1> Start 18: googletest-test-part-test
1>18/45 Test #18: googletest-test-part-test .................. Passed 0.26 sec
1> Start 19: gtest_throw_on_failure_ex_test
1>19/45 Test #19: gtest_throw_on_failure_ex_test ............. Passed 0.24 sec
1> Start 20: gtest-typed-test_test
1>20/45 Test #20: gtest-typed-test_test ...................... Passed 0.31 sec
1> Start 21: gtest_unittest
1>21/45 Test #21: gtest_unittest ............................. Passed 0.82 sec
1> Start 22: gtest-unittest-api_test
1>22/45 Test #22: gtest-unittest-api_test .................... Passed 0.24 sec
1> Start 23: gtest_skip_in_environment_setup_test
1>23/45 Test #23: gtest_skip_in_environment_setup_test ....... Passed 0.23 sec
1> Start 24: gtest_skip_test
1>24/45 Test #24: gtest_skip_test ............................ Passed 0.24 sec
1> Start 25: gtest-death-test_ex_nocatch_test
1>25/45 Test #25: gtest-death-test_ex_nocatch_test ........... Passed 0.26 sec
1> Start 26: gtest-death-test_ex_catch_test
1>26/45 Test #26: gtest-death-test_ex_catch_test ............. Passed 0.27 sec
1> Start 27: gtest_no_rtti_unittest
1>27/45 Test #27: gtest_no_rtti_unittest ..................... Passed 0.81 sec
1> Start 28: googletest-break-on-failure-unittest
1>28/45 Test #28: googletest-break-on-failure-unittest ....... Passed 0.41 sec
1> Start 29: gtest_skip_check_output_test
1>29/45 Test #29: gtest_skip_check_output_test ............... Passed 0.08 sec
1> Start 30: gtest_skip_environment_check_output_test
1>30/45 Test #30: gtest_skip_environment_check_output_test ... Passed 0.07 sec
1> Start 31: googletest-catch-exceptions-test
1>31/45 Test #31: googletest-catch-exceptions-test ........... Passed 0.57 sec
1> Start 32: googletest-color-test
1>32/45 Test #32: googletest-color-test ...................... Passed 0.42 sec
1> Start 33: googletest-env-var-test
1>33/45 Test #33: googletest-env-var-test .................... Passed 0.43 sec
1> Start 34: googletest-filter-unittest
1>34/45 Test #34: googletest-filter-unittest ................. Passed 1.93 sec
1> Start 35: gtest_help_test
1>35/45 Test #35: gtest_help_test ............................ Passed 0.36 sec
1> Start 36: googletest-list-tests-unittest
1>36/45 Test #36: googletest-list-tests-unittest ............. Passed 0.37 sec
1> Start 37: googletest-output-test
1>37/45 Test #37: googletest-output-test ..................... Passed 0.47 sec
1> Start 38: googletest-shuffle-test
1>38/45 Test #38: googletest-shuffle-test .................... Passed 0.42 sec
1> Start 39: googletest-throw-on-failure-test
1>39/45 Test #39: googletest-throw-on-failure-test ........... Passed 0.36 sec
1> Start 40: googletest-uninitialized-test
1>40/45 Test #40: googletest-uninitialized-test .............. Passed 0.33 sec
1> Start 41: gtest_list_output_unittest
1>41/45 Test #41: gtest_list_output_unittest ................. Passed 0.34 sec
1> Start 42: gtest_xml_outfiles_test
1>42/45 Test #42: gtest_xml_outfiles_test .................... Passed 0.60 sec
1> Start 43: googletest-json-outfiles-test
1>43/45 Test #43: googletest-json-outfiles-test .............. Passed 0.10 sec
1> Start 44: gtest_xml_output_unittest
1>44/45 Test #44: gtest_xml_output_unittest .................. Passed 0.43 sec
1> Start 45: googletest-json-output-unittest
1>45/45 Test #45: googletest-json-output-unittest ............ Passed 0.15 sec
1>100% tests passed, 0 tests failed out of 45
1>Total Test time (real) = 22.02 sec
========== 生成: 成功 1 个,失败 0 个,最新 1 个,跳过 0 个 ==========
endl;
参考文献:
https://www.jianshu.com/p/748c458eec90
https://blog.csdn.net/tianzssi/article/details/112391682