2010-09-21 39 views
1

我希望動態擴展我的CxxTest Suite附加測試項目,但我發現所有的測試場景必須在編譯時可用(硬編碼)。cxxtest套件可以在運行時動態擴展嗎?

我的情況是,我有一個相當笨重的C++類,有20多種方法需要測試。這個類需要測試40多個不同的數據集。這些數據集是通過類構造函數獲得的,通過參數進行控制。

我的主要目標是避免爲不同的數據集重寫相同的20個測試用例。我想使用包含數據集列表的控制文件,併爲同一個測試套件創建不同的燈具。

Q1)如何動態地(在運行時)向測試套件添加更多測試? Q2)可以在運行時動態添加燈具嗎?是否有更好的測試套件可用於動態裝置?

Q3)這是TDD技術避免的事情嗎?任何人都能很好地總結TDD技術。

感謝,

- J·喬根森 -

回答

1

真的有沒有什麼直接的方式來做到這一點。在運行cxxtestgen時,測試的次數是在編譯時間之前確定的。它解析您的文件並找到以test開頭的方法名稱。它還會找到TestSuite後代並生成代碼來實例化每個代碼一次。您可以在每個測試套件上將write a createSuite function傳遞給套件的構造函數,但您仍然只能返回一個對象。

您可以修改您的構建設置以在不同時間調用測試程序,每次在命令行上傳遞不同的參數。該計劃中的摺痕是由CxxTest生成的默認main不接受命令行參數。您需要提供您自己的實現來檢查參數,然後調用普通的測試運行器。事情是這樣的:

std::string global_var; // check this in your test cases 
int main(int argc, char* argv[]) { // add parameter list 
    global_var = argv[1]; // read parameter list 
    return CxxTest::ErrorPrinter().run(); // standard CxxTest 
} 

要使用該功能,省略--error-printer選項,當您運行cxxtestgen,在文件的最後添加<CxxTest world>,並使用the --template option to generate your test program

但是,只要你正在編寫自己的main,你也可以嘗試在那裏解析你的數據集文件,然後多次調用測試運行器。類似這樣的:

int main() { 
    std::fstream dataset("datasetlist.txt"); 
    int result = 0; 
    while (std::getline(dataset, global_var)) 
    result += CxxTest::ErrorPrinter().run(); 
    return result; 
}