UnitTest ++命令行参数

时间:2011-06-30 17:21:30

标签: c++ unit-testing unittest++

我想在我的一个测试中使用命令行参数。我在网上找不到任何这样的例子。

TEST(SomeTest)
{
    std::string file("this is some command line argument");
    CHECK(something);
}

int main(int argc, char** argv)
{
    return UnitTest::RunAllTests();
}

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是能够指定“测试输入”而无需为每个测试输入新测试。

假设您有3组测试数据要运行测试例程。你只想运行

./unittest_build SomeTest file1
./unittest_build SomeTest file2
./unittest_build SomeTest file3

没有将测试烘焙到测试版本中。

但你也可以这样做:

void runCheck(const std::string& filename) {
    std::string file(filename);
    // well, you're gonna do stuff here
    CHECK(something);
}

TEST(SomeTest)
{
    runCheck(std::string("your first testing datafile"));
    runCheck(std::string("your second testing datafile"));
    runCheck(std::string("your third testing datafile"));
    // this is what your test is. It tests these files. 
}

int main(int argc, char** argv)
{
    return UnitTest::RunAllTests();
}

参数化测试意味着测试不再只是一个测试。它现在是一个功能而不是单元测试。

答案 1 :(得分:0)

答案

没有真正的理由直接测试命令行参数。相反,编写单元测试以检查给定不同参数的代码(函数和类)的行为。一旦您对代码在单元测试下正常工作感到满意,只需将其插入main,它也应该在那里正常工作。

澄清

想象一下,您对std::string构造函数的参数进行了单元测试。

TEST(SomeTest)
{
    std::string file("this is some command line argument");
    CHECK(something);
}

然后将其插入main

int main(int argc, char** argv)
{
    std::string file(argv[1]);

    // do stuff....

    return 0;
}

因为命令行参数在传递给构造函数之前不会发生任何事情,所以已经有效地测试了它。另一方面,如果你的main一团糟,我建议先重构一下。