2017-03-16 2 views
4

A la fin de chaque test "d'intégration basée sur les fichiers", je souhaite effacer un dossier temporaire des fichiers associés.Comment vérifier si le test a échoué dans Google Test TearDown()?

Si le test échoue, je veux y laisser les fichiers, afin que je puisse examiner la sortie inattendue.

Y a-t-il un moyen dans Google Test TearDown de vérifier si le test a échoué?

Répondre

3

Y a-t-il un moyen dans Google Test TearDown de vérifier si le test a échoué?

Oui, vous pouvez le faire dans ::testing::Test::HasFailure() être interroger les cas de test de votre appareil et en utilisant le résultat de comptabiliser les échecs dans un organe de contre de le dispositif qui peut être interrogé dans son TearDown(). Un exemple élémentaire:

#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(); 
} 

Et sortie:

[==========] 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