首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用UnitTest++运行单个测试?

如何使用UnitTest++运行单个测试?
EN

Stack Overflow用户
提问于 2010-08-23 17:02:08
回答 6查看 4.2K关注 0票数 12

如何使用UnitTest++运行单个测试?

我开箱即用地运行UnitTest++。我的main函数如下所示:

代码语言:javascript
复制
int main()
{
   printf("diamond test v0.1 %s\n\n",TIMESTAMP);
   diamond::startup();
   UnitTest::RunAllTests();
   diamond::shutdown();
   printf("press any key to continue...");
   getc(stdin);
}

为了调试,我想写一些类似于UnitTest::RunSingleTests("MyNewUnitTest");而不是UnitTest::RunAllTests();的代码。UnitTest++是否提供这样的函数?如果提供,语法是什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-08-23 18:14:48

尝试将其作为unittest的main() (实际上我将其放在一个文件中并将其添加到unittest库中,以便在链接到库时可执行文件自动使用此main()。非常方便。)

代码语言:javascript
复制
int main( int argc, char** argv )
{
  if( argc > 1 )
  {
      //if first arg is "suite", we search for suite names instead of test names
    const bool bSuite = strcmp( "suite", argv[ 1 ] ) == 0;

      //walk list of all tests, add those with a name that
      //matches one of the arguments  to a new TestList
    const TestList& allTests( Test::GetTestList() );
    TestList selectedTests;
    Test* p = allTests.GetHead();
    while( p )
    {
      for( int i = 1 ; i < argc ; ++i )
        if( strcmp( bSuite ? p->m_details.suiteName
                           : p->m_details.testName, argv[ i ] ) == 0 )
          selectedTests.Add( p );
      p = p->next;
    }

      //run selected test(s) only
    TestReporterStdout reporter;
    TestRunner runner( reporter );
    return runner.RunTestsIf( selectedTests, 0, True(), 0 );
  }
  else
  {
    return RunAllTests();
  }
}

使用参数调用以运行单个测试:

代码语言:javascript
复制
> myexe MyTestName

或单人套间

代码语言:javascript
复制
> myexe suite MySuite
票数 14
EN

Stack Overflow用户

发布于 2011-02-09 23:17:12

这几乎是正确的。"Test“实际上是作为链表中的一个节点,所以当您将它添加到一个新的列表中时,您必须更正指针,以避免包含比预期更多的测试。

所以你需要替换掉

代码语言:javascript
复制
  p = p->next;

使用

代码语言:javascript
复制
  Test* q = p;
  p = p->next;
  q->next = NULL;

杰弗里

票数 7
EN

Stack Overflow用户

发布于 2012-05-17 06:35:44

如果您告诉RunTestsIf一个套件的名称,它只能运行一个套件。

代码语言:javascript
复制
class MyTrue
{
    public:
        MyTrue(const std::string & suiteName, const std::string & testName)
                : suite(suiteName), test(testName) {}

        bool operator()(const UnitTest::Test* const testCase) const
        {
            return suite.compare(testCase->m_details.suiteName) == 0 && 
                         test.compare(testCase->m_details.testName) == 0;
        }
    private:
        std::string suite;
        std::string test;
};

int main (...) {
    bool isSuite = false;
    std::string suiteName = "suite01";
    std::string testName  = "test01";

    UnitTest::TestReporterStdout reporter;
    UnitTest::TestRunner runner(reporter);
    if (isSuite) {
        runner.RunTestsIf(UnitTest::Test::GetTestList(),
            NULL, MyTrue(suiteName, testName), 0);
    } else {
        runner.RunTestsIf(UnitTest::Test::GetTestList(),
            NULL, UnitTest::True(), 0);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3546054

复制
相关文章

相似问题

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