还不知道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();
EXPECT_EQ(, st.pop());
} TEST(StackTest, testAll) { //同一个testcase可以建多个test,不同test之间相互独立
MyStack st;
st.push();
st.push();
int val = st.pop(); // 非致命断言,一个失败仍然会继续后续的
EXPECT_EQ(, val); // 预期val等于28
EXPECT_NE(, val); // 预期val不等于28,fail
EXPECT_GT(, val); // 大于,LE小于等于
EXPECT_TRUE(val==) << "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个ULP之内
// ULP: Unit in the Last Place -- 浮点数变量之间的最小间隔
// 例如: 如果,float X; Y = 是大于X的最小浮点数
// 那么,ULP = Y - X;
EXPECT_DOUBLE_EQ(7.0, ((double) val)/); //double类型
EXPECT_NEAR(6.0, ((float) val)/, ); // 差值小于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(, val);
ASSERT_GT(, val);
ASSERT_TRUE(val==);
ASSERT_STREQ("", st.toString().c_str()); //fail
ASSERT_STRCASEEQ("9 ", st.toString().c_str()); // 忽略大小写
}
测试后结果如下
当非致命的断言 EXPECT_NE(28, val)失败时,测试并没有终止。
当碰到致命断言ASSERT_STREQ("9", st.toString().c_str())失败时 ,测试终止。