我有一個JUnit測試類,其中有幾個static final int
s,可以在測試器代碼的頂部重新定義,以允許測試值發生一些變化。我在@BeforeClass方法中有邏輯來確保開發人員輸入的值不會破壞我的測試。在JUnit(4.8.1)測試套件中分配靜態final int
如果開發人員設置boolean useRandomValues = true;
,我希望通過允許在@BeforeClass方法中將這些整數設置爲(明智的)隨機值來進一步改進變體。我可以簡單地刪除final
關鍵字,以允許隨機值覆蓋初始化值,但是我有final
以確保這些值不會無意中更改,因爲某些測試依賴於這些值的一致性。
我可以在JUnit測試類中使用構造函數嗎?如果我試圖使我的@BeforeClass成爲測試類的構造函數,並且使得單獨的構造函數似乎不允許賦值給這些變量(即使我將它們留在未聲明的聲明處),那麼Eclipse開始在任何地方放置紅色下劃線。
是否有另一種方法來確保在@BeforeClass方法之後嘗試更改這些變量會導致編譯時錯誤?
是否已經初始化?
你爲什麼要使用靜態的呢?正常的字段會比較容易。 – skaffman 2010-03-21 22:53:05
在測試中使用隨機值通常不是一個好主意,因爲隨機測試輸出可能很糟糕。當您運行一次測試並通過測試,然後再次運行它們並失敗時,可能很難找出失敗的原因。如果我是你,我會確保在隨機值啓用時輸出足夠多的紅旗,並確保記錄這些隨機值,以便如果一組值的測試失敗,則可以返回並重新測試這些值隔離潛在的問題。 – Ricket 2010-03-31 20:48:33
這是一個很好的觀點,我從這個角度沒有想過。在這種情況下,我可以在測試套件運行時將值輸出到控制檯,或者我可以在每個斷言的失敗消息中包含相關值,或者將所有值以某種方式記錄到文件中。 在這種情況下,我不認爲我從隨機數中獲得了足夠的價值,因爲它值得讓它們留在其中,所以我會把它們拿出來(我已經將這個功能默認爲禁用,所以它應該不會反正正常使用的差異)。 – 2010-03-31 23:25:40