【测试】【GTEST】GTest相关

GTest

要测试DelayTrace类,派生出一个测试类TestDelayTrace将辅助测试函数TestItemsSum printHash放在派生类中。

	
class TestDelayTrace :public QPP::DelayTrace
{
public:
    int TestItemsSum()
    {
        if (0 >= delayMap.Size())
        {
            log_warning("delayMap  %d", delayMap.Size());
            return 0;
        }
        uint64_t sum = 0,count = 0;
        KMAP32_FOREACH_KV(&(this->delayMap), uint32_t, icount, key)
        count += *icount; //count
        sum += key * *icount;
        KMAP32_FOREACH_END()
        if (0 == count)
        {
            log_warning("delay data count 0");
            return 0;
        }
        return count; //count
    }

    void printHash()
    {
        KMAP32_FOREACH_KV(&(this->delayMap), uint32_t, v, key)
        log_debug("%u---%u", key, *v);
        KMAP32_FOREACH_END()
    }
};

测试组件DelayTraceFix 在随后的测试代码中此类会被实例化,测试目标为trace实例。
SetUp()是在所有案例执行前执行,理解为前期准备工作,TearDown() 是在所有案例执行后执行,理解为最后收尾工作。


class DelayTraceFix : public ::testing::Test
{
protected:
    void SetUp() override
    {}

    void TearDown() override
    {}

    TestDelayTrace trace;
};

每次执行用例的时候
SetUp() 先于测试用例执行
TearDown()测试用例后,最后执行

TEST宏与断言

这里有四个单元测试 SaveDataSaveData_mount10WCalcQuality4CalcQuality3
使用TEST_F(<类名>,<测试名称>)格式,每一个TEST_F相互独立数据不可共享,出了当前TEST_F之后重头再来TEST_F可理解为类的外挂函数。
SaveData 验证插入数据功能
SaveData_mount10W 暴力测试插入10W数据 验证插入数据功能
CalcQuality4 造假数据 验证CalcQuality计算结果
CalcQuality3 造假数据 验证CalcQuality计算结果

使用EXPECT_EQ 断言 检查是否相等
更多断言参考此处


TEST_F(DelayTraceFix, SaveData) {
    trace.SaveData(0);
    trace.SaveData(1);
    trace.SaveData(2);
    trace.SaveData(3);
    trace.SaveData(4);

    trace.SaveData(0);
    trace.SaveData(1);
    trace.SaveData(2);
    trace.SaveData(3);
    trace.SaveData(4);

    trace.SaveData(65535);
    trace.SaveData(65536);
    trace.SaveData(-1);
}

TEST_F(DelayTraceFix, SaveData_mount10W) {
   for (size_t i = 0; i < 100000; i++){
       trace.SaveData(std::rand());
    }
    int count = 0;
    count = trace.TestItemsSum();
    EXPECT_EQ(count == 100000, true);
    printf("count %d\n",count);
}

TEST_F(DelayTraceFix, CalcQuality4){
    trace.SaveData(34);
    trace.SaveData(34);
    trace.SaveData(15);
    trace.SaveData(16);
    trace.SaveData(78);

    int threshold = 100;
    int avg = -1, variance = -1;
    int percent = -1;
    bool success = trace.CalcQuality(threshold, 0, &avg, &variance, &percent);

    EXPECT_EQ(success, true);
    EXPECT_EQ(avg, 35);
    EXPECT_EQ(variance, 522);
    EXPECT_EQ(percent, 0);
}

TEST_F(DelayTraceFix, CalcQuality3){
    trace.SaveData(72);
    trace.SaveData(71);
    trace.SaveData(73);
    trace.SaveData(74);
    trace.SaveData(76);
    trace.SaveData(100);

    int threshold = 100;
    int avg = -1, variance = -1;
    int percent = -1;
    bool success = trace.CalcQuality(threshold, 0, &avg, &variance, &percent);

    EXPECT_EQ(success, true);
    EXPECT_EQ(avg, 77);
    EXPECT_EQ(variance, 102);
    EXPECT_EQ(percent, 16);
}

对一个求绝对值函数测试

ASSERT_* 系列的断言,当检查点失败的时候,终止当前函数的执行(不退出当前案例)。
EXPECT_* 系列的断言,当检查点失败的时候,当前函数继续执行。

数值断言

  1. *_TRUE 期待值为真
  2. *_FALSE 期待值为假
  3. *_EQ 期待值和对比值相等
  4. *_NE 期待值和对比值不相等
  5. *_LT 期待值小于对比值
  6. *_LE 期待值小于等于对比值
  7. *_GT 期待值大于对比值
  8. *_GE 期待值大于对比值

字符串断言

终止断言普通断言验证
ASSERT_STREQ(val1,val2)EXPECT_STREQ(val1,val2)val1 == val2
ASSERT_STRNE(val1,val2)EXPECT_STRNE(val1,val2)val1 != val2
ASSERT_STRCASEEQ(val1,val2)EXPECT_STRCASEEQ(val1,val2)忽略大小写 val1 == val2
ASSERT_STRCASENE(val1,val2)EXPECT_STRCASENE(val1,val2)忽略大小写 val1 != val2

int Abs(int x)
{
     return x > 0 ? x : -x;
}

TEST(IsAbsTest,HandlerTrueReturn)
{
    ASSERT_TRUE(Abs(1) == 1) << "Abs(1)=1";  //ASSERT_TRUE期待结果是true,operator<<输出一些自定义的信息
    ASSERT_TRUE(Abs(-1) == 1) << "Abs(-1)=1";
    ASSERT_FALSE(Abs(-2) == -2);  //期待结果是false

    ASSERT_EQ(Abs(1),Abs(-1));       
    EXPECT_EQ(Abs(1),1);
    ASSERT_NE(Abs(-1),0);
    ASSERT_LT(Abs(-1),2);
    ASSERT_GT(Abs(-1),0);
    ASSERT_LE(Abs(-1),2);
    ASSERT_GE(Abs(-1),0);
}

关于gmock

gmock 感觉采用的意义不大,要打桩的话,采用宏定义替代源函数加独立的实现模式,更方便,没看出用gmock有啥优势,而且即使用gmock,也要先用宏定义替代源函数才行,有点画蛇添足了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值