猫猫哥

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

还不知道googletest基本使用方法的请参看前一篇blog  使用googletest进行C++单元测试

本篇仍然使用testStack测试文件进行测试,测试代码如下

 


#include <gtest/gtest.h>
#include "MyStack.h"
#include <iostream>

TEST(StackTest, testPop) {  //StackTest是testcase名,testPop为具体的test
    MyStack st;
    st.push(9);
    EXPECT_EQ(9, st.pop());
}

TEST(StackTest, testAll) {  //同一个testcase可以建多个test,不同test之间相互独立
    MyStack st;
    st.push(9);
    st.push(28);
    int val = st.pop();

  // 非致命断言,一个失败仍然会继续后续的
    EXPECT_EQ(28, val);  // 预期val等于28
    EXPECT_NE(28, val);   // 预期val不等于28,fail
    EXPECT_GT(29, val);  // 大于,LE小于等于
    EXPECT_TRUE(val==28) << "val somehow is not equal to 28";  // 如果失败,可以打印自定义消息

    // 字符串检查
    EXPECT_STREQ("9 ", st.toString().c_str());  //C风格字符串的比较
    EXPECT_STRCASEEQ("9 ", st.toString().c_str());  // 忽略大小写

    EXPECT_FLOAT_EQ(7.0, ((float) val)/4);   
        // 两个浮点数几乎相等:相差在4个ULP之内
        // ULP: Unit in the Last Place  -- 浮点数变量之间的最小间隔
        //      例如:    如果,float X;  Y = 是大于X的最小浮点数
        //                那么,ULP = Y - X;   
    EXPECT_DOUBLE_EQ(7.0, ((double) val)/4);  //double类型
    EXPECT_NEAR(6.0, ((float) val)/5, 1);  // 差值小于1

//    EXPECT_THROW(st.pop(), std::out_of_range);   // 预期st.pop()会抛出一个out_of_range异常
//    EXPECT_NO_THROW(st.pop());  // 预期st.pop()会抛一个异常
 //   EXPECT_NO_THROW(st.pop());   // 预期st.pop()不会抛异常

    
    // 致命断言,如果一个失败,后续的不会再测试
    ASSERT_EQ(28, val);     
    ASSERT_GT(29, val);     
    ASSERT_TRUE(val==28);   
    ASSERT_STREQ("9", st.toString().c_str()); //fail
    ASSERT_STRCASEEQ("9 ", st.toString().c_str());  // 忽略大小写
}

 

 

测试后结果如下

当非致命的断言 EXPECT_NE(28, val)失败时,测试并没有终止。

当碰到致命断言ASSERT_STREQ("9", st.toString().c_str())失败时 ,测试终止。

 

 

posted on 2019-01-08 00:03  猫猫哥  阅读(2255)  评论(0编辑  收藏  举报