首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UnitTest++命令行参数

UnitTest++命令行参数
EN

Stack Overflow用户
提问于 2011-07-01 01:21:30
回答 2查看 2.1K关注 0票数 0

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

代码语言:javascript
复制
TEST(SomeTest)
{
    std::string file("this is some command line argument");
    CHECK(something);
}

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

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-01 02:31:58

回答

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

澄清

假设您对std::string构造函数的参数进行了单元测试。

代码语言:javascript
复制
TEST(SomeTest)
{
    std::string file("this is some command line argument");
    CHECK(something);
}

然后将其插入main

代码语言:javascript
复制
int main(int argc, char** argv)
{
    std::string file(argv[1]);

    // do stuff....
    
    return 0;
}

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

票数 0
EN

Stack Overflow用户

发布于 2011-12-14 15:13:13

我认为你正在寻找的是指定“测试输入”的能力,而不需要为每个输入进行新的测试。

假设您有3组测试数据,您希望对其运行测试例程。你只是想跑

代码语言:javascript
复制
./unittest_build SomeTest file1
./unittest_build SomeTest file2
./unittest_build SomeTest file3

而不需要在测试构建中烘焙测试。

但你也可以这样做:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6538631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档