googletestteardown

How to check if the test failed in Google Test TearDown()?


At the end of every "file based integration" test, I want to clear a temp folder of associated files.

If the test fails, I want to leave the files there, so I can review the unexpected output.

Is there a way in the Google Test TearDown to check if the test has failed?


Solution

  • Is there a way in the Google Test TearDown to check if the test has failed?

    Yes, you can do that be querying ::testing::Test::HasFailure() in the test cases of your fixture and using the result to tally failures in a counter member of the fixture that can be queried in its TearDown(). An elementary example:

    #include <gtest/gtest.h>
    #include <iostream>
    
    struct Fixture : public ::testing::Test {
        virtual void SetUp() {
            fails = 0;
        }
    
        virtual void TearDown() {
            if (fails > 0) {
                std::cerr << "Fixture::TearDown sees failures" << std::endl;
            }
        }
    
        unsigned fails;
    };
    
    TEST_F(Fixture, foo) {
        EXPECT_EQ(1,0);
        fails += ::testing::Test::HasFailure();
    }
    TEST_F(Fixture, bar) {
        EXPECT_EQ(1,1);
        fails += ::testing::Test::HasFailure();
    }
    
    int main(int argc, char **argv) {
      testing::InitGoogleTest(&argc, argv);
      return RUN_ALL_TESTS();
    }
    

    And output:

    [==========] Running 2 tests from 1 test case.
    [----------] Global test environment set-up.
    [----------] 2 tests from Fixture
    [ RUN      ] Fixture.foo
    /home/imk/dev/so/gtest/main.cpp:19: Failure
          Expected: 1
    To be equal to: 0
    Fixture::TearDown sees failures
    [  FAILED  ] Fixture.foo (0 sec)
    [ RUN      ] Fixture.bar
    [       OK ] Fixture.bar (0 sec)
    [----------] 2 tests from Fixture (0.001 sec total)
    
    [----------] Global test environment tear-down
    [==========] 2 tests from 1 test case ran. (1 ms total)
    [  PASSED  ] 1 test.
    [  FAILED  ] 1 test, listed below:
    [  FAILED  ] Fixture.foo
    
     1 FAILED TEST