Search code examples
c++unittest++

How do I run a single test with UnitTest++?


How do I run a single test with UnitTest++ ?

I am running UnitTest++ out of the box as is. My main function looks like:

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);
}

For debugging I would like to write something like UnitTest::RunSingleTests("MyNewUnitTest"); instead of UnitTest::RunAllTests();. Does UnitTest++ provide such a function and if so, what is the syntax?


Solution

  • try this as your main() for unittest (I actually put this in a file and added that to the unittest library, so that when linking to the library the executable automatically uses this main(). very convenient.)

    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();
      }
    }
    

    invoke with arguments to run a single test:

    > myexe MyTestName
    

    or single suite

    > myexe suite MySuite