11

在每个“基于文件的集成”测试结束时,我想清除关联文件的临时文件夹。

如果测试失败,我想将文件保留在那里,以便查看意外输出。

Google Test TearDown 中有没有办法检查测试是否失败?

4

2 回答 2

13

Google Test TearDown 中有没有办法检查测试是否失败?

是的,您可以::testing::Test::HasFailure()在夹具的测试用例中进行查询,并使用结果来计算夹具的计数器成员中的故障,该计数器成员可以在其TearDown(). 一个基本的例子:

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

并输出:

[==========] 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
于 2017-03-17T11:14:40.023 回答
0

@mike-kinghan 答案的简化和更新版本。仍在使用::testing::Test::HasFailure()但没有计数器(它总是评估为 1,因为HasFailure()返回一个布尔值)

#include <gtest/gtest.h>
#include <iostream>

struct Fixture : public ::testing::Test {
  virtual void SetUp() {}

  virtual void TearDown() {
    if (::testing::Test::HasFailure()) {
      std::cerr << "Fixture::TearDown sees failures" << std::endl;
    } else {
      std::cout << "Fixture::TearDown sees NO failures" << std::endl;
    }
  }
};

TEST_F(Fixture, foo) { EXPECT_EQ(0, 0); }
TEST_F(Fixture, bar) { EXPECT_EQ(1, 0); }
TEST_F(Fixture, car) { EXPECT_EQ(2, 2); }
TEST_F(Fixture, tar) { EXPECT_EQ(3, 0); }

输出: 在此处输入图像描述

于 2022-01-11T16:52:49.593 回答