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

z2acfund  于 11个月前  发布在  Go
关注(0)|答案(2)|浏览(113)

我想知道,是否有可能检查失败的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复杂化,并有其他并发症。
有没有办法做到这一点?在单独的线程中启动该函数或重置失败标志?

kcugc4gi

kcugc4gi1#

正如之前在@Yksisarvinen的评论中提到的,你可以使用EXPECT_NO_FATAL_FAILURE宏(或它的ASSERT对应物)。即使subcheck例程包含only非致命Assert,这也有效。在你的例子中,下面是你如何检查它:

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规则”可能很难,也不总是令人不安,但你仍然尽可能地努力。希望这能有所帮助!

cgh8pdjw

cgh8pdjw2#

可以使用EXPECT_EQ,然后使用ASSERT_EQ

void subcheck () {
  // show all failure in a single run
  EXPECT_EQ(1,0);
  EXPECT_EQ(1,2);

  // make sure ASSERT_NO_FATAL_ERROR works
  ASSERT_EQ(1,0);
  ASSERT_EQ(1,2);
}

字符串

相关问题