我想知道,是否有可能检查失败的ASSERT
或EXPECT
语句,该语句发生在被调用函数内部,并且独立于任何其他或先前失败的ASSERT
/ { {1}}语句。基本上:
EXPECT
我无法在 TestFailure 上进行询问,因为在void subcheck () {
EXPECT_EQ(1,1);
}
void check () {
EXPECT_EQ(1,2);
subcheck();
//Here I want to determine whether subcheck had failure
}
之前存在故障。另外,我想避免使用具有返回subcheck
函数的变通办法,因为这会使bool
变得复杂,并带来其他复杂情况。
有没有办法做到这一点?在单独的线程中启动该功能还是重置失败标志?
答案 0 :(得分:0)
如先前在@Yksisarvinen的评论中所述,您可以使用EXPECT_NO_FATAL_FAILURE
宏(或其对应的ASSERT
)。即使subcheck
例程包含仅个非致命断言,此方法也有效。对于您的示例,以下是检查方法:
void subcheck () {
EXPECT_EQ(1, 3) << "This failed"; // Will be printed
}
void check () {
EXPECT_EQ(1, 2);
EXPECT_NO_FATAL_FAILURE(subcheck()) << "This failed"; // Will not be printed although it compiles
}
输出为:
/path/to/test.cpp:580: Failure
Value of: 2
Expected: 1
/path/to/test.cpp:582 Failure
Value of: 3
Expected: 1
This failed
您可以使用的另一种方法是使用testing::AssertionResult
。这是一个示例:
testing::AssertionResult subcheck2 () {
return 1 == 3 ? testing::AssertionSuccess() : testing::AssertionFailure();
}
void check ()
{
EXPECT_EQ(1, 2);
EXPECT_EQ(testing::AssertionSuccess(), subcheck2()) << "This failed"; // Will be printed
}
这次,输出看起来像:
/path/to/test.cpp:580: Failure
Value of: 2
Expected: 1
/path/to/test.cpp:582: Failure
Value of: subcheck2()
Actual: 0
Expected: testing::AssertionSuccess()
Which is: 1
This failed
话虽如此,我建议您重新考虑您的测试策略,因为听起来您的测试太复杂了。遵循“一个ASSERT规则”可能很困难,而且并不总是可行的,但是您仍然会尽可能地努力。希望这会有所帮助!