2012-03-15 41 views
0

這裏是我的測試:在Java單元測試中,是否可以在循環中包含assert語句?

@Test 
public void randomDouble() { 
    int Min = -1; 
    int Max = 1; 
    double r; 

    for (int i = 0; i < 5; i++) { 
     r = Min + (Math.random() * ((Max - Min) + 1)); 
     System.out.printf("%d %d: %.1f\n", Min, Max, r); 
     assertTrue(Max < r && Max > r); 
    } 
} 

看來,第一次測試後返回循環中的assertTrue語句運行。如果我刪除它,我會得到5個結果輸出。有了它,我只有一個。

我在Python中使用這種模式進行模糊測試。

回答

3

沒有什麼限制斷言在循環中。

一些其他的點,雖然:

  • 測試總會失敗(請參閱下一個項目你可能想要的東西)

  • Java有在語言斷言:assert Min <= r && r <= Max : "bad range"

  • ((Max - Min) + 1)中的「+1」對我來說似乎是錯的

+0

你說得對。謝謝。 – klenwell 2012-03-15 01:44:19

+0

oops - 其實我只是修正了一個錯誤(把'> ='改成'<=')。嚴格地說,我認爲你可以使用'r 2012-03-15 01:50:05

5

斷言在第一次迭代中失敗;它永遠不會通過(r如何可以更大小於Max?)。

+0

Egad。因爲擔心Java會阻止我,所以我錯過了顯而易見的事實。輸出甚至看起來對我來說是正確的!謝謝你放縱我。 – klenwell 2012-03-15 01:48:14

1

即使您將斷言更改爲assertTrue(Min < r && Max > r);(這似乎是預期的),但在第一次迭代中,測試仍然經常失敗:r = Min + (Math.random() * ((Max - Min)+1));中的「+1」是錯誤的。

相關問題