我正在Java中實現一個模型,它需要對集合進行迭代並經歷多個標識階段,它涉及到循環,while循環等。這是我想要的東西在細粒度級別進行測試,以便我相信它已正確實施。單元測試,靜態和工廠
我已經使用它作爲開始單元測試的機會,因爲它是我認識到有益於我的代碼的東西。自那以後,我一直在閱讀叢書,以加快JUnit和單元測試的速度。
基本上我的問題可以歸結爲兩個相互矛盾的建議件我收到:
1)靜是邪惡的。不要碰靜電。不要測試私人,你可能想要在那裏上課。
2)使用工廠創建允許使用參數進行依賴注入 - 可能允許使用模擬和存根進行隔離。
在我的例子我期待執行沿行的操作:
double height = 223.42; // this was set iterating over a collection of doubles
//blah
HeightBounds b = HeightBounds.getHeightBounds(height);
//more blah
爲了避免建立什麼將成爲一個非常漫長而複雜的代碼塊,我已經這樣做了,我只能整體測試。通過這種方式,我可以測試公共可訪問對象,以確保系統組件全部正確執行。
常識對我說,靜態工廠沒有錯,而且他們很容易測試,但是我錯過了一些盲目明顯的東西,因爲我正在學習測試驅動設計?
謝謝
你應該單元測試每種測試有意義的方法,這包括靜態方法。 – DwB 2011-04-12 15:17:27
「statics is evil」有可能主要針對靜態_variables_,因爲它們在測試之間保留它們的值,因此如果測試沒有正確重置,可能會導致測試之間的依賴關係。在我看來,不接觸靜態變量的靜態_methods_沒有問題。 – 2011-04-12 15:19:59
問題是我可以在類中作爲靜態方法調用來進行邊界檢查,但它會非常程序化,我不想將它列在公共接口中。我可以在不改變可見性的情況下測試靜態方法的一種方法是擴展類以進行測試並製作方法來調用它們,但是我讀到的所有內容都是「靜態方法是代碼味道」,您應該使用類。鑑於我在嵌入式環境中運行,儘管我更喜歡避免創建對象的想法,而不是完美的OO設計......仍在審議! – Uniqe 2011-04-12 15:26:05