2016-05-30 46 views
1

我有一個正在使用Catch.cpp測試了C++項目:捕捉動態參數傳遞給測試用例

我編譯並運行下面的文件來運行我的測試:

#define CATCH_CONFIG_MAIN 
#include "catch.hpp" 
#include "test1.h" 
#include "test2.h" 

在不久的將來我將要運行更復雜的測試,這需要命令行參數。

換句話說,我想對我的測試運行應用一些邏輯,能夠從循環或條件內運行它們並將變量傳遞給它們。

我發現這個網頁:Supply your own main

這似乎是一個很好的方向,但我找不到更詳細的解釋。

這可以通過趕上?或者也許有更好的方法來實現我所描述的?

+0

您可能正在尋找參數化測試。然而,據我所知,Catch還不支持他們。對於單元測試,你不會真的希望那些輸入值從運行改變到運行。 – chris

+0

您可能想要使用更高級的測試框架,如[google測試](https://github.com/google/googletest)。 –

回答

0

我設法做的是寫我自己的main,解析命令行並將所需參數(在我的情況下是IP)存儲在全局變量中。這不是最漂亮的代碼,但是這項工作:

#define CATCH_CONFIG_RUNNER 
#include "catch.hpp" 

std::string IP; 

int main(int argc, char* const argv[]) 
{ 
    Catch::Session session; 

    int returnCode = session.applyCommandLine(argc, argv, Catch::Session::OnUnusedOptions::Ignore); 
    if (returnCode != 0) 
     return returnCode; 

    for (auto token : session.unusedTokens()) { 
     printf("Token: %s\n", token.data.c_str()); 
     IP = token.data; 
    } 

    return session.run(); 
} 

我然後運行這個作爲TestRunner.exe [test-case-tag] --MY_IP_HERE。請注意,沒有參數前面的「 - 」,它們不會出現在unusedTokens中。

相關問題