调用ASSERT_TRUE的函数,返回值类型定义必须是void,如果想返回别的类型,就用EXPECT_TRUE:
void abc::fun()
{
ASSERT_TRUE(fun1());
}
bool abc::fun()
{
bool result = fun1();
EXPECT_TRUE(result );
return result ;
}
ASSERT_TRUE is a macro. When expanded it will contain a branch like:
if (fun1() == false) {
return;
}
This is how ASSERT_TRUE does a hard stop on failure, but it also means that your method bool abc::fun() now has a void return exit path, in conflict with its signature.
Possible fixes include don't use hard stop asserts:
bool abc::fun(){
bool result = fun1();
EXPECT_TRUE(result); //No return in expansion
//No hard stop!
return result;
}
or change your methods return type if not needed:
void abc::fun(){
ASSERT_TRUE(fun1()); //Hard stop on failure
}
or return by reference:
void abc::fun(bool &outResult){
outResult = fun1(); //return result by reference
ASSERT_TRUE(result);
}
引用地址