刚接触到死亡测试时,感到很新鲜。但按着找到的例子运行后还显示运行错误。
例子源码为
void Foo()
{// Foo() 该函数在实际运行时异常退出
int *pInt = 0;
*pInt = 42 ;
}
TEST(FooDeathTest, Demo)
{ EXPECT_DEATH(Foo(), "");
}
修改为:
void Foo()
{//Foo() 该函数在实际运行时异常退出
int *pInt = 0;
assert(pInt);
*pInt = 42 ;
};
TEST(FooDeathTest, Demo)
{
EXPECT_DEATH(Foo(), "\\d");
}
运行正常。
看来所谓的死亡测试用例的目的就在于监督是否添加了assert(...)等断言,以及抛出的断言信息是否符合预期。
该例子中assert()抛出 整形的异常代码 0/1;“\\d”:匹配任何数字型代码见 regex)
好东西。测试健壮性的好工具。
类似,监视异常抛出:
TEST(FooTest, HandleZeroInput)
{
//抛出任何类型的异常
EXPECT_ANY_THROW(Foo(10, 0));
//抛出异常信息为字串
EXPECT_THROW(Foo(0, 5), char*);
/// \ 抛出的异常信息是整形
EXPECT_THROW(FooInt(0, 6),int);
}