Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to expect program exit in gtest?

I'm testing some code that uses CHECK from glog and I'd like to test that this check fails in certain scenarios. My code looks like:

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...
}

I've done some research into gtest and how I might be able to test for this. I found EXPECT_FATAL_FALIURE, EXPECT_NONFATAL_FAILURE, and HAS_FATAL_FAILURE but I haven't managed to figure out how to use them. I'm fairly confident that if I change CHECK(some_flag) to EXPECT_TRUE(some_flag) then EXPECT_FATAL_FAILURE will work correctly but then I'm introducing test dependencies in non-test files which is...icky.

Is there a way for gtest to catch the abort signal (or whatever CHECK raises) and expect it?

like image 724
Paymahn Moghadasian Avatar asked Nov 02 '15 19:11

Paymahn Moghadasian


1 Answers

aaaand I found an answer 5 minutes after posting this question. Typical.

This can be done using Death tests from gtest. Here's how my test looks:

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

This passes. Woohoo!

like image 56
Paymahn Moghadasian Avatar answered Sep 27 '22 23:09

Paymahn Moghadasian