CPPUNIT: Как создать экземпляр TestFixture, используя его имя - PullRequest
1 голос
/ 25 января 2012

У меня есть два тестовых класса с именами " TT_Common " и " TT_Container ", которые расширяют CPPUNIT_NS :: TestFixture:

class TT_Common    : public CPPUNIT_NS::TestFixture ......
class TT_Container : public CPPUNIT_NS::TestFixture ......

, и класс-инициатор с именем TT_Runner, которыйextends CPPUNIT_NS :: TestRunner:

class TT_Runner : public CPPUNIT_NS::TestRunner
{
   .....
void run( CPPUNIT_NS::TestResult &controller, const std::string &testPath )
{

  CPPUNIT_NS::TestPath  path        = m_suite->resolveTestPath( testPath );
  CPPUNIT_NS::Test      *testToRun  = path.getChildTest();

  for ( size_t iIdx = 0; iIdx < testToRun->getChildTestCount(); iIdx++ )
  {
    CPPUNIT_NS::Test* psTest    = testToRun->getChildTestAt(iIdx);
    std::string       testName  = psTest->getName();
    // testName is TT_Common for iIdx = 0 and TT_Container for iIdx = 1
   }
 }

У меня уже есть имя TestFixture , но как его создать Instace ?Я не могу найти фабрику или реестр, который берет имя и возвращает экземпляр .

1 Ответ

2 голосов
/ 25 января 2012

Дело не в том, как работают приборы, а в том, как работают тесты.Приспособление создается для каждого теста отдельно, поэтому тесты изолированы.И тесты запускаются в неопределенном порядке , поэтому они не должны зависеть друг от друга.

Обычно, когда у вас есть функции, которые зависят друг от друга, у вас просто есть длинный тестовый пример, который вызываетторговый центр.Если вам нужно что-то еще, вам действительно нужно сделать это вручную вне cppunit.

...