还不知道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())失败时 ,测试终止。