可以說,我有一個看起來像這樣的方法:EasyMock的期望私有方法調用
public static String[] parseFoo(Foo anObject){
Foo anotherObject = parseFoo2(anObject);
...
}
private static Foo parseFoo2(Foo anObject){
...
}
而且這兩種方法都在同一個班。 parseFoo2只是一個輔助方法,可以幫助parseFoo完成一些工作。我試圖測試parseFoo方法。是否有任何人在EasyMock的,我可以像我可以指定實例方法的方式parseFoo2規定對私有方法調用的返回值呼籲與
EasyMock.createMock(...);
anObject.expect(...).andReturn(...);
的對象,因爲我想測試的公共方法,但我不想進入私有方法並測試其中的實現。
謝謝
這個答案太絕對了,需要一個哲學的觀點,即私人方法沒有應該被提出的內部契約。如果該方法在類中的幾個地方使用,就像公共方法一樣,它需要維護它的行爲模式。另外,如果你有一個方法調用幾個方法(全部是私有的),每個方法都有2-3個邏輯路徑,測試頂層方法變得非常複雜。沒有什麼比在需要檢查時失敗的複雜測試更糟糕:)。我更喜歡頻繁的路障經常可預測的成本。 – Gus 2012-08-20 15:08:18
@格斯,我不同意。從實用的角度來看,測試高粒度的私有方法會阻止您輕鬆重構代碼。我會同意,隨着複雜性的增長,它應該被分解爲應該單獨測試的因素。在這種情況下應該考慮類。從哲學的角度來看,我認爲一個班的私人部分不是一個應該測試的單元。它是一個實現細節,而測試應該反映來自被測對象的要求,而不是它的內部工作。 – Vitaliy 2012-08-20 17:03:27
我會同意,有時您需要模擬一種私人方法 - 例如,在內部(私人)邏輯的嘲諷非常複雜並且錯過了測試點的情況下。但這些案例相對較少,通常指向另一個設計流程。無論如何,它並不屬於OP的用例。 – Vitaliy 2012-08-20 17:13:39