2012-12-18 21 views

回答

1

我不能評論ng的具體測試,但我可以推薦這個有趣的文件約writing testable code。特別是它有一個關於單身人士的部分。這裏有幾個提取物:

  • 使用全局狀態的每一次測試需要它的預期的狀態開始,否則測試將失敗。但另一個對象可能在之前的測試中突變了全局狀態。
  • 全局狀態通常會阻止測試能夠並行運行,這會迫使測試套件運行速度變慢。因爲你需要在測試過程中改變實例,所以你會經常在所謂的單例中看到諸如reset()或setForTest()之類的增變器方法。如果忘記在測試後重置Singleton,稍後的使用將使用過時的底層實例,並且可能會以難以調試的方式失敗。

底線:如果可以,請避免使用單例,而應使用依賴注入。換句話說,而不是,:

public void someMethod() { 
    Controller c = Controller.getInstance(); 
    c.doSomething(); 
} 

贊成:

public void someMethod(Controller c) { 
    c.doSomething(); 
} 
+0

的共享PDF是一個真正的指南! – RohanRasane

1

在測試自動化中,或者通常應該避免單身人士。 特別是在java中,您通常不能爲新的測試用例重置單例。 這導致了新tets案件使用singelton的結論,這個結果來自於前一個案例。這不好!
可能會創建特殊的單數形式,它有一個resetSingleton()或setInstance()方法,它只會用在測試用例中。
此外,您還可以通過反射來調整singelton。我已經完成了所有3種工藝,但是:

最好的是避免singeltons。

相關問題