如何发信号通知测试想跳过自己

时间:2014-09-23 15:30:40

标签: c++ googletest

我在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中是否存在启用此类行为的功能?

2 个答案:

答案 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
}