Catch动态地将参数传递给测试用例

时间:2016-05-30 16:53:59

标签: c++

我有一个正在使用Catch.cpp测试的C ++项目:

我编译并运行以下文件来运行我的测试:

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

在不久的将来,我会想要运行更复杂的测试,这需要命令行参数。

换句话说,我想在我的测试运行中应用一些逻辑,能够从内部循环或条件中运行它们并将变量传递给它们。

我找到了这个页面:Supply your own main

这似乎是一个很好的方向,但我找不到更详细的解释。

可以通过捕获来完成吗?或者有更好的方法来实现我所描述的内容?

1 个答案:

答案 0 :(得分: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