2014-09-23 98 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測試運行器不會顯示跳轉整齊,但我不關心這一點,因爲我只使用命令行工具來運行測試用例。