zoukankan      html  css  js  c++  java
  • gtest

    更通用的做法是:不必在每个平台下分别编译生成静态库,可以直接使用/fused-src/gtest下的gtest.h和gtest-all.cc两个文件,此两个文件包含了所有你需要用到的Google Test的东西。如果没有/fuse-src这个文件,可以使用/scripts/fuse_gtest_files.py这个文件生成,操作步骤是:(1)、配置好python;(2)、打开命令提示符,将其定位到/scripts文件夹下,输入命令:python  fuse_gtest_files.py fused_gtest ;会在/scripts文件夹下生成一个fused_gtest/gtest文件,里面包含gtest.h和gtest-all.cc两个文件,此两个文件和/fuse-src中的同名文件内容是完全一致的。

    下面是对gtest的一些总结:

    1.  TEST(test_case_name, test_name)

    TEST_F(test_fixture,test_name)

    TEST宏的作用是创建一个简单测试,它定义了一个测试函数,在这个函数里可以使用任何C++代码并使用提供的断言来进行检查。

    多个测试场景需要相同数据配置的情况,用TEST_F。

    2.  gtest中,断言的宏可以分为两类,一类是ASSERT系列,一类是EXPECT系列。

    {ASSERT|EXPECT}_EQ(expected,actual): Tests that expected == actual

    {ASSERT|EXPECT}_NE(v1,v2):           Tests that v1 != v2

    {ASSERT|EXPECT}_LT(v1,v2):           Tests that v1 < v2

    {ASSERT|EXPECT}_LE(v1,v2):           Tests that v1 <= v2

    {ASSERT|EXPECT}_GT(v1,v2):           Tests that v1 > v2

    {ASSERT|EXPECT}_GE(v1,v2):           Tests that v1 >= v2

    EXPECT_*和ASSERT_*的区别:(1)、EXPECT_*失败时,案例继续往下执行;(2)、ASSERT_*失败时,直接在当前函数中返回,当前函数中ASSERT_*后面的语句将不会执行,退出当前函数,并非退出当前案例。

    断言:布尔值检查、数值型数据检查、字符串检查、显示成功或失败、异常检查、Predicate Assertions、浮点型检查、Windows HRESULT assertions、类型检查。

    3.  ::testing::InitGoogleTest(&argc,argv):gtest的测试案例允许接收一系列的命令行参数,将命令行参数传递给gtest,进行一些初始化操作。gtest的命令行参数非常丰富。

    4.  RUN_ALL_TESTS():运行所有测试案例。

    5.  可以通过操作符"<<"将一些自定义的信息输出,如在EXPECT_EQ(v1, v2)<< "thisis a error! "

    6.  gtest的事件一共有3种:(1)、全局的,所有案例执行前后;(2)、TestSuite级别的,在某一批案例中第一个案例前,最后一个案例执行后;(3)、TestCase级别的,每个TestCase前后。

    全局事件:要实现全局事件,必须写一个类,继承testing::Environment类,实现里面的SetUp和TearDown方法。SetUp方法在所有案例执行前执行;TearDown方法在所有案例执行后执行。

    TestSuite事件:需要写一个类,继承testing::Test,然后实现两个静态方法:(1)、SetUpTestCase方法在第一个TestCase之前执行;(2)、TearDownTestCase方法在最后一个TestCase之后执行。

    TestCase事件:是挂在每个案例执行前后的,需要实现的是SetUp方法和TearDown方法。(1)、SetUp方法在每个TestCase之前执行;(2)、TearDown方法在每个TestCase之后执行。

    每个基于gtest的测试过程,是可以分为多个TestSuite级别,而每个TestSuite级别又可以分为多个TestCase级别。这样分层的结构的好处,是可以针对不同的TestSuite级别或者TestCase级别设置不同的参数、事件机制等,并且可以与实际测试的各个模块层级相互对应,便于管理。

    7.  参数化:必须添加一个类,继承testing::TestWithParam<T>,其中T就是你需要参数化的参数类型。

    8.  编写死亡测试案例时,TEST的第一个参数,即test_case_name,请使用DeathTest后缀,原因是gtest会优先运行死亡测试案例,应该是为线程安全考虑。

    9.  testing::AddGlobalTestEnvironment(newFooEnvironment):在main函数中创建和注册全局环境对象。

    10.  对于运行参数,gtest提供了三种设置的途径:(1)、系统环境变量;(2)、命令行参数;(3)、代码中指定FLAG。

    命令行参数:(1)、--gtest_list_tests:使用这个参数时,将不会执行里面的测试案例,而是输出一个案例的列表;(2)、--gtest_filter:对执行的测试案例进行过滤,支持通配符;(3)、--gtest_also_run_disabled_tests:执行案例时,同时也执行被置为无效的测试案例;(4)、--gtest_repeat=[COUNT]:设置案例重复运行次数;(5)、--gtest_color=(yes|no|auto):输出命令行时是否使用一些五颜六色的颜色,默认是auto;(6)、--gtest_print_time:输出命令时是否打印每个测试案例的执行时间,默认是不打印的;(7)、--gtest_output=xml[:DIRECTORY_PATH|:FILE_PATH:将测试结果输出到一个xml中,如—gtest_output=xml:d:foo.xml  指定输出到d:foo.xml ,如果不是指定了特定的文件路径,gtest每次输出的报告不会覆盖,而会以数字后缀的方式创建;(8)、--gtest_break_on_failure:调试模式下,当案例失败时停止,方便调试;(9)、--gtest_throw_on_failure:当案例失败时以C++异常的方式抛出;(10)、--gtest_catch_exceptions:是否捕捉异常,gtest默认是不捕捉异常的,这个参数只在Windows下有效。

  • 相关阅读:
    安装Android studio出现'tools.jar' seems to be not in Android Studio classpath......的解决方法
    jdk的设置及安装android studio提示does not point to a valid jvm问题
    第七章 : Git 介绍 (下)[Learn Android Studio 汉化教程]
    netcore使用AutoFac实现AOP
    netcore使用Autofac实现依赖注入
    新创建的netcore项目报错
    asp.net core 使用log4net日志组件
    Unity容器实现AOP面向切面编程
    点击a链接防止滚动条滚动
    wkhtmltopdf 自定义字体未生效或中文乱码
  • 原文地址:https://www.cnblogs.com/hugb/p/5558479.html
Copyright © 2011-2022 走看看