2012-08-27 46 views
3

假設我有兩次/多次不同的測試需要在兩次迭代中在gtest中執行。 那麼,如何執行相同的?我嘗試了我的接近,但它失敗了。 我寫的,如何在Googletest中運行兩個不同的測試

::testing::GTEST_FLAG(repeat) = 2; //may be 2 or 3 or so on... 
switch(i) //int i = 1; 
{ 
case 1: 
::testing::GTEST_FLAG(filter) = "*first*:*second*"; 
i++; break; 
case 2: 
::testing::GTEST_FLAG(filter) = "*third*:*fourth*"; 
i++; break; 
and so on............ 

但谷歌測試只服用了"*first*:*second*"並運行兩次。 請幫幫我。我的要求是Gtest應該逐個運行所有的測試案例。 例如,首先它會執行case 1:然後case 2:等等...

回答

4

我不認爲你可以使用::testing::GTEST_FLAG(repeat)

然而做到這一點,你可以用類似實現自己的目標:

#include "gtest/gtest.h" 

int RunTests(int iteration) { 
    switch(iteration) { 
    case 1: ::testing::GTEST_FLAG(filter) = "*first*:*second*"; break; 
    case 2: ::testing::GTEST_FLAG(filter) = "*third*:*fourth*"; break; 
    default: ::testing::GTEST_FLAG(filter) = "*"; 
    } 
    return RUN_ALL_TESTS(); 
} 

int main(int argc, char **argv) { 
    ::testing::InitGoogleTest(&argc, argv); 
    int final_result(0); 
    for (int i(0); i < 3; ++i) { 
    int result(RunTests(i)); 
    if (result != 0) 
     final_result = result; 
    } 
    return final_result; 
} 

我不確定當使用GTEST_FLAG(repeat)時,gtest如何計算RUN_ALL_TESTS()的返回值,但如果所有測試都通過,此處main將返回0,否則它將返回的最後一個非零值調用。

+0

: - 感謝您的幫助。但是'control'看到沒有任何'preconditions'(像過濾器)的'InitGoogletest'它開始運行所有的測試用例,然後它進入過濾的測試用例。 我找到了解決方案。請看下面。 –

+0

@RasmiRanjanNayak很高興你有你的解決方案。雖然'InitGoogleTest'並不完全符合你的想法。第一次調用它時只有一個效果 - 所有後續調用都是空操作。你可以放心地將它移動到答案中的for循環之前。在我的回答中,你第一次沒有過濾器,因爲我的循環開頭是0而不是1,並且沒有'case 0',所以它使用'default'的情況,即''*「'。 – Fraser

+0

: - 是的,你說得對。我在'for'循環之前做了'InitGoogleTest',並且事情都很好。但是有一個問題,在'for'循環之內和之前保留'InitGoogleTest'有什麼區別(除了'啓動'GoogleTest'多次直到條件失敗]? –

2
int main(int argc, char **argv) { 
    int i = 1; 
     vector<string> str; 
     str.push_back("*first*:*second*"); 
     str.push_back("*third*:*fourth*"); 
     str.push_back("*fifth.fifthtestname*"); 
     for(i = 0; i != str.size(); i++) 
     { 
      ::testing::GTEST_FLAG(filter) = str.at(i); 
      InitGoogleTest(&argc, argv); 
      RUN_ALL_TESTS(); 
      // getchar(); 
     } 
     getchar(); 
} 
相關問題