Googletest-在本地检查失败?

时间:2019-01-11 09:19:36

标签: c++ unit-testing googletest

我想知道,是否有可能检查失败的ASSERTEXPECT语句,该语句发生在被调用函数内部,并且独立于任何其他或先前失败的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变得复杂,并带来其他复杂情况。

有没有办法做到这一点?在单独的线程中启动该功能还是重置失败标志?

1 个答案:

答案 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规则”可能很困难,而且并不总是可行的,但是您仍然会尽可能地努力。希望这会有所帮助!