我通过 GoogleTest 运行了大量单元测试。目前,其中一个(称为 fooTest)在运行完整测试套件时失败,但在单独运行时通过。因此,在 fooTest 之前运行的一个(或多个)测试正在做一些导致其失败的事情,这对于测试来说当然是一个很大的问题,我显然想找到罪魁祸首。
这是在默认运行条件下发生的,因此测试顺序始终相同。 fooTest 大约是此运行顺序的一半,并且有足够的测试,后半部分测试的运行时间很重要,尤其是多次运行时。
所以我想将 googletest 设置为在 fooTest 运行后始终停止测试运行 - 无论它通过还是失败。我知道我可以执行 --gtest_break_on_failure,但是如果我执行导致 fooTest 通过的测试运行,我仍然想停在那里,而不是执行其他所有操作。我可以运行调试并在测试后添加断点,但这也会减慢速度,感觉不太理想。
看起来这可能是一个简单的设置,但我还没有找到任何东西。我希望有一个我可以使用的运行参数,或者一个技巧来实现这一点。
最佳答案
您有多种选择:
只需调用 exit函数位于
fooTest
末尾。创建 test fixture 。在
SetUp
中检查始终为 false 的标志,但如果执行fooTest
则将其设置为 true。像这样的事情:
bool skip_testing = false;
// Class for test fixture
class MyTestFixture : public ::testing::Test {
protected:
void SetUp() override {
if (skip_testing) {
GTEST_SKIP();
}
}
};
TEST_F(MyTestFixture, test1) {
//
EXPECT_EQ(1, 1);
}
TEST_F(MyTestFixture, footest) {
EXPECT_EQ(1, 1);
skip_testing = true;
}
TEST_F(MyTestFixture, test2) {
//
EXPECT_EQ(1, 1);
}
TEST_F(MyTestFixture, test3) {
//
EXPECT_EQ(1, 1);
}
请参阅此处的工作示例:https://godbolt.org/z/8dzKGE6Eh
- 与选项 2 类似,但使用 explicit success and failure在
SetUp
中而不是GTEST_SKIP
中。不过,首选使用GTEST_SKIP
,因为您的输出将显示测试已被跳过。
关于c++ - 有没有办法在运行特定测试后停止 GoogleTest,无论它通过还是失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72061504/