gpt4 book ai didi

c++ - Googletest - 在本地检查失败?

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:16 27 4
gpt4 key购买 nike

我想知道,是否有可能检查失败的 ASSERTEXPECT 语句,这些语句发生在被调用函数内部并且独立于任何其他或先前的失败 ASSERT/EXPECT 语句。基本上:

void subcheck () {
EXPECT_EQ(1,1);
}

void check () {
EXPECT_EQ(1,2);

subcheck();
//Here I want to determine whether subcheck had failure
}

我不能询问 TestFailure,因为在 subcheck 之前有失败。此外,我想避免使用函数返回 bool 之类的变通方法,因为这会使 ASSERT 复杂化并产生其他并发症。

有办法吗?在单独的线程中启动该函数或重置失败标志?

最佳答案

正如之前在@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

综上所述,我建议您重新考虑您的测试策略,因为听起来您的测试太复杂了。遵循“One ASSERT 规则”可能很难,而且并不总是可行,但您仍然会尽可能地努力做到这一点。希望这对您有所帮助!

关于c++ - Googletest - 在本地检查失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143498/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com