5

我正在测试CHECKglog使用的一些代码,并且我想测试此检查在某些情况下是否失败。我的代码如下所示:

void MyClass::foo() {
  // stuff...
  // It's actually important that the binary gets aborted if this flag is false
  CHECK(some_flag) << "flag must be true";

  // more stuff...
}

我已经做了一些研究gtest,以及我如何能够对此进行测试。我找到了EXPECT_FATAL_FALIURE, EXPECT_NONFATAL_FAILUREHAS_FATAL_FAILURE但我还没有弄清楚如何使用它们。我相当有信心,如果我更改CHECK(some_flag)EXPECT_TRUE(some_flag)thenEXPECT_FATAL_FAILURE将正常工作,但随后我将在非测试文件中引入测试依赖项,这... icky。

有没有办法gtest捕捉中止信号(或任何CHECK引发的信号)并期待它?

4

1 回答 1

14

aaaand 我在发布此问题 5 分钟后找到了答案。典型的。

这可以使用来自 gtest 的死亡测试来完成。这是我的测试的样子:

TEST(MyClassTest, foo_death_test) {
  MyClass clazz(false); // make some_flag false so the CHECK fails
  ASSERT_DEATH( { clazz.foo(); }, "must be true");
}

这通过了。呜呼!

于 2015-11-02T20:06:16.583 回答