我在google test中有一组 typed 测试用例。但是,其中一些测试用例根本不适用于特定类型参数。考虑这个示例类型测试用例:
TYPED_TEST_P(TheTest, ATest){
if(TypeParam::isUnsuitedForThisTest()){
return;
}
// ... real test code goes here
}
这很好用,简单地跳过了测试。但是,在执行测试时,我看到了通常的
[ RUN ] XYZ/TheTest/0.ATest
[ OK ] XYZ/TheTest/0.ATest (0 ms)
所以很明显测试被跳过了,看起来它只是成功了。我想以某种方式显示测试用例被跳过。谷歌测试中是否有某种方法可以表示跳过了测试用例。这样的事情(这不存在):
TYPED_TEST_P(TheTest, ATest){
if(TypeParam::isUnsuitedForThisTest()){
SIGNAL_SKIPPED(); // This is what I would like to have
return;
}
// ... real test code goes here
}
然后,输出将变为这样:
[ RUN ] XYZ/TheTest/0.ATest
[ SKIPPED ] XYZ/TheTest/0.ATest (0 ms)
gtest中是否存在启用此类行为的功能?
答案 0 :(得分:8)
我提出了一个简单但可接受的解决方案:
只需使用宏打印一条额外的跳过线:
#define CHECK_FEATURE_OR_SKIP(FEATURE_NAME) \
do{\
if(!TypeParam::hasFeature(FEATURE_NAME)) {\
std::cout << "[ SKIPPED ] Feature " << #FEATURE_NAME << "not supported" << std::endl;\
return;\
}\
} while(0)
然后我可以简单地使用这个宏:
TYPED_TEST_P(TheTest, ATest){
CHECK_FEATURE_OR_SKIP(MyFeatureXY);
// ... real test code goes here
}
结果如下:
[ RUN ] XYZ/TheTest/0.ATest
[ SKIPPED ] Feature MyFeatureXY not supported
[ OK ] XYZ/TheTest/0.ATest (0 ms)
唯一的小缺陷是仍然有OK
行,但至少很明显,测试用例被跳过,并且缺少的功能也整齐地显示出来。另一个缺陷是GUI测试运行器不会显示整齐的跳过,但我不关心这一点,因为我只使用命令行工具来运行测试用例。
答案 1 :(得分:2)
自gtest发布 1.10.0 起,宏GTEST_SKIP()
可用,因此您可以执行以下操作:
TYPED_TEST_P(TheTest, ATest){
if(TypeParam::isUnsuitedForThisTest()){
GTEST_SKIP(); // this ends the test here so no need for return
}
// ... real test code goes here
}