如何在 Google Test TearDown() 中检查测试是否失败?
How to check if the test failed in Google Test TearDown()?
在每次 "file based integration" 测试结束时,我想清除关联文件的临时文件夹。
如果测试失败,我想将文件留在那里,以便查看意外输出。
Google Test TearDown 中有没有办法检查测试是否失败?
Is there a way in the Google Test TearDown to check if the test has failed?
是的,您可以在 ::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
@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); }
输出:
在每次 "file based integration" 测试结束时,我想清除关联文件的临时文件夹。
如果测试失败,我想将文件留在那里,以便查看意外输出。
Google Test TearDown 中有没有办法检查测试是否失败?
Is there a way in the Google Test TearDown to check if the test has failed?
是的,您可以在 ::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
@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); }
输出: