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