1 回答

TA貢獻2021條經驗 獲得超8個贊
它總是一個妥協。
但這種折衷是雙向的:如果你對所有東西都使用工廠,那么是的,你將能夠模擬出幾乎所有東西,并且你不會在測試方法中有任何單一的“新”,但是,你的測試將看起來像一長串模擬,并且很難閱讀/理解/維護測試及其 IMO 測試的強制性要求。
還有一點需要考慮,黑盒測試比白盒測試要好得多。在您的情況下,您不返回JSONArray users
,只需將其創建為內部變量即可進行內部計算。
現在,理想情況下,測試應該檢查給定輸入參數列表,該方法是否返回預期值,僅此而已,測試不應該擺弄諸如“如果我想讓它通過,我必須在這里創建內部值”之類的問題以這種特殊的方式,然后創造另一個類似的價值”。這一切都使得測試不明確且非常脆弱。
所以這里有一些“經驗法則”:
總是喜歡黑盒測試。不要檢查方法內部做了什么,最好在編寫測試時甚至不要查看被測類的實現。
始終嘗試編寫在給定參數集的情況下實際返回某些內容的方法 這將使測試更易于閱讀和理解
僅模擬/存根交互 - 該類需要的真正依賴項。通常這些并不多,而且它們出現在非常具體的點上。不要模擬內部變量的創建、就地完成的靜態計算的結果或返回值。
例子:
// mocking example:
class SomeService {
private SomeDAO dao; // this is a real dependency, mock it in test
}
// don't mock
Math.max(a,b)
// don't mock
LocalDateTime.of(...)
// don't mock
public int f() {
...
List<Integer> internalVariable = new ArrayList<>(..)
}
添加回答
舉報