googletest基本測試宏


還不知道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())失敗時 ,測試終止。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM