googletest学习(一)

此栏目参考https://www.cnblogs.com/coderzh/archive/2009/04/06/1430364.html

一、前期知识准备:

1、断言用法

布尔值检查
Fatal assertionNonfatal assertionVerifies
ASSERT_TRUE(condition);EXPECT_TRUE(condition);condition is true
ASSERT_FALSE(condition);EXPECT_FALSE(condition);condition is false
数值型数据检查
Fatal assertionNonfatal assertionVerifies
ASSERT_EQ(val1, val2);EXPECT_EQ(val1, val2);val1 == val2
ASSERT_NE(val1, val2);EXPECT_NE(val1, val2);val1 != val2
ASSERT_LT(val1, val2);EXPECT_LT(val1, val2);val1 < val2
ASSERT_LE(val1, val2);EXPECT_LE(val1, val2);val1 <= val2
ASSERT_GT(val1, val2);EXPECT_GT(val1, val2);val1 > val2
ASSERT_GE(val1, val2);EXPERT_GE(val1, val2);val1 >= val2
字符串检查
Fatal assertionNonfatal assertionVerifies
ASSERT_STRED(str1, str2)EXPERT_STRED(str1, str2)the two strings are the same
ASSERT_STRNE(str1, str2)EXPERT_STRNE(str1, str2)the two trings are not the same
ASSERT_STRCASEEQ(str1, str2)EXPERT_STRCASEEQ(str1, str2)ignoring case, the two strings are the same
ASSERT_STRCASENE(str1, str2)EXPERT_STRCASENE(str1, str2)ignoring case, the two strings are not the same
浮点型检查
Fatal assertionNonfatal assertionVerifies
ASSERT_FLOAT_EQ(experted, actual);EXPECT_FLOAT_EQ(expert, actual);the two float values are almost equal
ASSERT_DOUBLE_EQ(experted, actual);EXPERT_DOUBLE_EQ(experted, actual);the two double values are almost equal
返回失败
Fatal assertionNonfatal assertion
FAIL();ADD_FAILURE();

2、事件机制

gtest的事件一共有三种:

1. 全局的,所有案例执行前后。

2. TestSuite级别的,在某一批案例中第一个案列前,最后一个案例执行后。

3. TestCase级别的,每个TestCase前后。

全局事件

需要写一个类继承testing::Environment类,实现里面的Setup和TearDown方法。

其中SetUp()方法在所有案列执行前后执行,TearDown()方法在所有案列执行后执行。

#include <gmock/gmock.h>
#include <iostream>
class FooEnvironmen : public testing::Environment
{
public:
    virtual void SetUp()
    {
    std::cout << "Foo FooEnvironment SetUP" << std::endl;
    }
    virtual void TearDown()
    {
    std::cout << "Foo FooEnvironment TearDown" << std::endl;
    }
};
int main(int argc, char* argv[])
{
    testing::AddGlobalTestEnvironment(new FooEnvironmen); // 将事件挂进来
    ::testing::InitGoogleMock(&argc, argv);
    RUN_ALL_TESTS();
}

TestSuite事件

需要写一个类继承testing::Test,然后实现两个静态方法SetUpTestCase()和TearDownTestCase()。

其中SetUpTestCase()方法在第一个TestCase之前执行,TearDownTestCase()方法在最后一个TestCase之后执行。

TestCase事件

TestCase事件是挂在每个案列执行前后的,实现方式和上面的几乎一样,不过需要实现的是另外两个方法:SetUp方法和TearDown方法。SetUp()方法在每个TestCase之前执行,TearDown()方法在每个TeatCase之后执行。

#include <gmock/gmock.h>
using namespace testing;

class FooTest : public testing::Test
{
public:
    // for TestSuite event
    static void SetUpTestCase()
    {
    std::cout << "Foo FooTset SetUP" << std::endl;
    }
    static void TearDownTestCase()
    {
    std::cout << "Foo FooTset TearDown" << std::endl;
    }
    // for TestCase event
    virtual void SetUp(){
        std::cout << "Foo Setup" << std::endl;
    }
    virtual void TearDown(){
        std::cout << "Foo TearDown" << std::endl;
    }
};

TEST_F(FooTest, OnePlusOneEqTwo)
{
    ASSERT_THAT(1+1, Eq(2));
}
TEST_F(FooTest, OnePlusOneEqTwo2)
{
    ASSERT_THAT(1+1, Eq(2));
}

3、参数化

如果有很多参数需要进行判断,为了简省代码可以用googleTest里的参数化方式。

首先创建一个类继承testing::TestWithParam,用宏定义INSTANTIATE_TEST_SUITE_P添加参数。用GetParm()方法去获取数据。

class MyTest : public::testing::TestWithParam<int>
{

};
bool GetEven(int n)
{
    if (n == 0) return false;

    if (n % 2 == 0)
    {
        return true;
    }
    else
    {
        return false;
    }

    return true;
}
TEST_P(MyTest, HandleTest)
{
    int n = GetParam(); // 用此方法获得参数
    EXPECT_TRUE(GetEven(n));
}

// 定义参数
// INSTANTIATE_TEST_SUITE_P的第一个参数为自定义,第二个参数为测试案列的名字,第三个参数是参数生成器
INSTANTIATE_TEST_SUITE_P(example, MyTest, testing::Values(2,7, 1, 20, 19));
INSTANTIATE_TEST_SUITE_P(range, MyTest, Range(0,10,1));
int main(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

4、死亡测试

通常在测试过程中,需要考虑各种各样的输入,有的输入可能直接导致程序崩溃,这时我们就需要检查程序是否按照预期的方式挂掉,这就是所谓的“死亡测试”。

使用的宏
Fatal assertionNonfatal assertionVerifies
ASSERT_DEATH(statement,regex)EXPECT_DEATH(statement, regex)

statement crashes with the given error

ASSERT_EXIT(statement,regex)EXPECT_EXIT(statement, regex)

statement exits with the given error and its exit code mathes predicate

注意:编写死亡测试案例时,TEST的第一个参数,即testcase_name,请使用DeathTest后缀。原因是gtest会优先运行死亡测试案列。

5、运行参数

对于运行参数,gtest提供了三种设置的途径:

1. 系统环境变量

2. 命令行参数

3. 代码中指令FLAG

测试案列集合
--gtest_filter

对执行的测试案例进行过滤,支持通配符

? 单个字符

* 任意字符

- 排除,如,-a表示除了a这个案列

:取或,如,a:b 表示a或b

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玟林禹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值