2014-09-23 27 views
12

我有一组输入在google测试中的测试用例。但是,这些测试案例中的一些不适用于特定的类型参数。考虑这个示例输入测试用例:如何发信号通知gtest测试想要跳过自己

TYPED_TEST_P(TheTest, ATest){ 
    if(TypeParam::isUnsuitedForThisTest()){ 
     return; 
    } 
    // ... real test code goes here 
} 

这很好,测试只是略过。但是,在执行测试时,我看到一个通常的测试,因此看起来它只是成功了,所以看起来不像是测试已经成功了。我想以某种方式显示测试用例已被跳过。谷歌测试中是否有某种方法表明测试用例已被跳过。像这样的东西(不存在):

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

根据您如何命名测试,可以使用[filters](https://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide#Running_a_Subset_of_the_Tests)仅运行测试的子集。 – 2014-09-23 15:41:26

+2

@JustinWood:我知道。但这是完全不同的事情。 – gexicide 2014-09-23 15:42:30

+1

如何在不同的测试用例中将不同的类型要求/适用性进行测试? – 2014-09-23 16:02:10

回答

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测试运行器不会显示跳转整齐,但我不关心这一点,因为我只使用命令行工具来运行测试用例。