2012-01-25 50 views
1

我有兩個名爲 「TT_Common」 和 「TT_Container」 延伸CPPUNIT_NS ::的TestFixture測試類來創建的TestFixture的實例TT_Runner延伸CPPUNIT_NS :: TestRunner的:CppUnit的:</p> <pre><code>class TT_Common : public CPPUNIT_NS::TestFixture ...... class TT_Container : public CPPUNIT_NS::TestFixture ...... </code></pre> <p>並號召anoter類:如何使用其名稱

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

爲什麼要手動實例化燈具?夾具是測試的基類。他們自己可能不會做任何有用的事情。 –

+0

我想使用它的名稱創建多個TT_Common和TT_Container類型的對象,以便在多個線程中的這些對象的上下文中啓動這些功能。 –

+0

測試將在適當的燈具環境下自動運行(每次測試都在新實例中)。我仍然不明白爲什麼你應該手動進行。 –

回答

2

這不是如何工作,而不是測試如何工作。分別爲每個測試實例化夾具,因此測試是分開的。並且測試以未指定的順序運行,因此它們不得相互依賴。

通常情況下,當你有相互依賴的函數時,你只需要一個長的測試用例來調用它們。如果你想要其他東西,你必須在cppunit之外手動完成。

+0

你是對的,通常測試函數不應該依賴於其他函數。我已經有了一個自行編寫的測試環境,它允許我使用XML指定要調用哪個函數(函數順序,調用時間,參數等)。我在CPPUnit中已經有了一些測試項目。我嘗試在我的CPPUnit項目中啓用這些功能,以便擁有一個測試環境而不是兩個。 –

相關問題