我目前正在與一位同事進行討論,他建議我分離出一個在我的類中使用的組件,創建一個抽象介面并從外部設定該組件的具體實體。我可以使用它在單元測驗中創建一個模擬,以便提高類的可測驗性。
雖然我非常理解這個論點,但我覺得我的班級的設計/界面受到了負面影響。
對我來說,這歸結為一個問題:為了可測驗性而改變類介面是否可以?哪個更重要,介面還是可測驗性?
以這種籠統的方式提問可以嗎,還是我應該舉一個例子?
非常感謝。
uj5u.com熱心網友回復:
如果您想使用模擬而不是真正的類,那么您已經在為兩個可互換的實作進行設計:真正的實作和測驗替身。這足以提取出一個介面。
可測驗性很重要;實用的可測驗單元比“純粹的”不可測驗單元有用得多。
盡管您可以使用像 之類的名稱setFooForTest或使用測驗檔案注釋來標記以測驗為重點的方法@VisibleForTesting,但理想情況下,您應該反映測驗是您的界面的使用者,并且您的界面對于您的使用者和您的測驗來說應該足夠通用。這可能意味著使用依賴注入或方法多載,如下所示:
public int doThing() {
return doThing(new DefaultCollaborator());
}
/** Does thing with a particular collaborator. Useful for testing. */
/* package */ int doThing(Collaborator collaborator) {
// ...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316790.html
上一篇:測驗enqueueUniqueWork和cancelUniqueWorkWorkManager的最佳方法
下一篇:Cypress代表回圈中的OR
