我有一个测试助手函数,包含各种gtest预期,例如EXPECT_TRUE()
。我有几次考试故意不及格。有没有一种简单的方法可以忽略这些特定测试的断言,而不是使测试助手函数参数复杂化?例如,在出现异常的情况下使用try/catch。
#include <gtest/gtest.h>
class Foo: public testing::Test
{
// fixture things...
};
void test_helper(bool val_a)
{
EXPECT_TRUE(val_a);
// more EXPECT validation goes here
}
TEST_F(Foo, failing_test)
{
// can this next line be wrapped to expect a failure?
test_helper(this, false);
}
在testing/testing.h
文件顶部附近有一个AssertionResult类,其描述为
"用于指示断言是否成功的类">
原始辅助函数签名中唯一需要更改的部分是return语句。
testing::AssertionResult test_helper(bool val_a)
{
if (!val_a)
{
return testing::AssertionFailure() << "custom error message...";
}
// more validation goes here
return testing::AssertionSuccess();
}
TEST_F(Foo, failing_test)
{
// This test now passes
ASSERT_FALSE(test_helper(this, false));
}
当测试失败时,您可以执行以下操作:
- 修复生产代码以通过测试
- 通过添加
DISABLED_
前缀禁用测试(测试在测试报告中不可见( - 使用
GTEST_SKIP()
跳过测试(测试在报告中列为已跳过( - 删除测试
遗憾的是,没有将某些测试标记为失败(即已知的bug(的功能,所以它是运行的,但整个测试套件被认为是成功的。为什么?推理很简单,一旦有人把测试标记为稍后固定,它就不会在合理的时间内固定。测试应该总是通过,否则它们的值很低。