2012-09-12 86 views
3

我寫了一個很長的參數化測試,一方爲參數的構造函數調用帶有雙括號語法來構建不同的對象爲二維數組的每一行:在參數亞軍JUnit測試用例的構造函數調用

Object[][] data = new Object[][] { 
{ 1, 2, 3, new Blah() {{ setA(); }} } 
{ 1, 2, 3, new Blah() {{ setB(); }} } 
... 

因爲JUnit的哲學是在每個@Test上調用測試用例構造函數,所以我假設它會對參數化測試執行相同的操作 - 但我看到它只調用該構造函數(爲參數化測試定義的構造函數)每行一次,而不是每行每次測試一次。

因此,測試領域的行爲是全球性的,測試正在相互影響。我想知道是否有辦法強制跑步者爲每個測試調用構造函數,就像常規的JUnit跑步者一樣。谷歌和JUnit網頁在這種情況下沒有幫助我。我真的不想重寫整個測試,這個測試是廣泛而且相當可讀的。

回答

1

我不知道如果我完全跟着你,但在測試運行時,這是發生了什麼:

  1. 你使用@參數加以註釋的方法的方法被稱爲一次且僅一次。
  2. 將爲註釋方法返回的集合中的每一行創建一個測試運行器實例。
  3. 測試使用其構造函數爲參數集合中的每一行實例化,但它傳遞到從初始調用緩存的相應參數值行中。

通過點擊herehere可以看到發生了什麼情況。如果你在調用之間改變狀態(使用靜態方法或其他),期望看到奇怪的事情。

編輯:在代碼中摸索後,我更好地理解你現在要問什麼。我剛剛使用JUnit 4.10調試了一個參數化測試,它確實每個測試每行調用一次構造函數。

+0

你是說4.10中的行爲已經改變,還是仍然存在緩存行? – orbfish

+0

嗯,這並沒有真正回答這個問題,但是感謝你的時間,它幫助我想出了一個解決方法。 – orbfish

相關問題