2009-10-29 263 views
16

我必須寫一個非常大的測試套件一套複雜的業務規則當前在幾個表格形式(例如,如果參數X Y Z爲如此這般,則該值應爲V1和V2之間)捕獲。每個規則都有一個名稱和它自己的語義。是否有可能以編程方式生成JUnit測試用例和套件?

我的最終目標是將測試套件組織到子測試套件中,併爲每個規則提供測試用例。

一種選擇是將所有這些規則實際硬編碼爲測試。這很醜陋,耗時而且不靈活。

另一種方法是編寫一個Python腳本,它將讀取規則文件並使用單元測試生成Java類。如果可以,我寧願避免這種情況。另一個變體是使用Jython。

然而,理想情況下,我想有一個測試套件來讀取文件,然後定義它們中的子套件和測試。所有這些測試都可以從表文件採取了一定的值進行初始化,在我們的系統中運行的固定入口點,然後調用基於預期值的結果會驗證功能。

是否有一種合理的方法可以僅使用Java來解決這個問題?

更新:我可能有所簡化我們的一種規則。其中一些確實是表格(excel風格),其他則更加模糊。一般問題仍然存在,因爲我可能不是第一個有這個問題的人。

+0

非常有興趣瞭解這個;我需要更多地瞭解測試用例。 – I82Much 2009-10-29 21:34:51

回答

17

在JUnit 4中,您將需要查看Parameterized runner。它是爲您描述的目的而創建的(數據驅動的測試)。然而,它不會將它們組織到套件中。

在Junit 3中,您可以編程方式創建TestSuites和Tests。答案是Junit Recipes,如果您需要它,我可以擴展它(請記住,JUnit 4可以運行Junit 3測試)。

8

你考慮過使用FIT嗎?

您似乎已經準備好了表格,「業務規則」聽起來像是「商業人士使用excel編寫它們」。

FIT是一個基於帶有輸入 - >預期輸出映射的表檢查測試的系統,並且提供了用於運行這些測試的開源java庫。

+0

也有它的Java驅動程序。 – 2009-10-29 21:49:59

+0

那就是我要說的;你的情況聽起來就像是合適的事情要解決的事情;我推薦fitnesse(http://fitnesse.org),因爲這是我能想到的最新和最新的實現。 – Kevlar 2009-10-29 21:56:27

+0

謝謝。我熟悉FIT,但對新的實現不熟悉;我會檢查他們。不過,我想知道是否有一種編程方式留在JUnit中。 – Uri 2009-10-30 13:18:46

1

我們嘗試了FIT,並決定使用Concordion。這個庫的主要優點是:

  • 測試可以檢查在旁邊的代碼庫(成Subversion存儲庫,例如)
  • 它們由一個標準的JUnit運行執行
0

我使用JUnit寫了一些非常相似的東西。我在XML文件中有大量的測試用例(30頁)。我沒有嘗試生成不同的測試,而是在單次測試中完成了所有測試,結果很好。

我的測試看起來是這樣的:

void setup() { 
    cases = read in the xml file 
} 

void test_fn_works() { 
    for case in cases { 
    assert(case.expected_result, fn(case.inputs), 
     'Case ' + case.inputs + ' should yield ' + case.expected_result); 

    } 
} 

了Ruby,我確實做到了你是什麼樣的飛行saying--發電試驗。然而,用Java做這件事很複雜,我不認爲這是值得的,因爲還有另一種非常合理的方法。

希望這會有所幫助。

相關問題