我在谷歌测试中有一组打字的测试用例.但是,其中一些测试用例根本不适用于特定类型参数.考虑这个示例类型测试用例:
TYPED_TEST_P(TheTest, ATest){
if(TypeParam::isUnsuitedForThisTest()){
return;
}
// ... real test code goes here
}
Run Code Online (Sandbox Code Playgroud)
这很好用,简单地跳过测试.但是,在执行测试时,我看到了平常
[ RUN ] XYZ/TheTest/0.ATest
[ OK ] XYZ/TheTest/0.ATest (0 ms)
Run Code Online (Sandbox Code Playgroud)
因此,测试被忽略并不明显,看起来它只是成功了.我想以某种方式显示测试用例被跳过.谷歌测试中是否有某种方法可以表示跳过了测试用例.像这样的东西(这不存在):
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 Code Online (Sandbox Code Playgroud)
然后,输出将更改为如下所示:
[ RUN ] XYZ/TheTest/0.ATest
[ SKIPPED ] XYZ/TheTest/0.ATest (0 ms)
Run Code Online (Sandbox Code Playgroud)
gtest中是否有一个能够实现这种行为的功能?
我提出了一个简单但可接受的解决方案:
只需使用宏打印一个额外的跳过线:
#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)
Run Code Online (Sandbox Code Playgroud)
然后我可以简单地使用这个宏:
TYPED_TEST_P(TheTest, ATest){
CHECK_FEATURE_OR_SKIP(MyFeatureXY);
// ... real test code goes here
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
[ RUN ] XYZ/TheTest/0.ATest
[ SKIPPED ] Feature MyFeatureXY not supported
[ OK ] XYZ/TheTest/0.ATest (0 ms)
Run Code Online (Sandbox Code Playgroud)
唯一的小缺陷是仍然有一条OK线,但至少很明显,测试用例被跳过,并且缺少的功能也整齐地显示出来.另一个缺陷是GUI测试运行器不会显示整齐的跳过,但我不关心这一点,因为我只使用命令行工具来运行测试用例.