我有一個要求,其中,我將有兩個類來處理兩個存儲庫,說Git
和Svn
。這兩個倉庫的操作將是相同的:如何設計接口以便在Java中進行簡單的測試?
- 獲取分支
- 獲得提交IDS
- 獲取最後一次提交的文件
- 等
我想我可以設計一個界面其中涵蓋了這些操作:
interface Repo{
public JSONObject getBranches()
public JSONObject getCommits()
. . . .
}
現在類Git
和Svn
可以實現Repo
。一切都很好。
但問題來了,我們將如何測試這些接口?因爲與回購的連接在相應的類別Git
,Svn
(例如在其構造函數中說明)中處理。因此,它看起來像
class Git implements Repo {
public Git(String url, String username, String password){
//connect to git url
}
. . .
}
現在,這是一個公平的設計相對於接口(在測試方面),或我們需要移動創建與回購連接的邏輯說其他類像RepoFactory
和它們注入方法params?這樣Repo
接口看起來像:
interface Repo{
public JSONObject getBranches(RepoFactory repo)
public JSONObject getCommits(RepoFactory repo)
. . . .
}
,我們可以輕鬆檢測注入的RepoFactory
嘲諷。
哪個會更好?還是別的比這兩個更好?
爲什麼不做一個測試方法,它接受'Repo'並簡單地創建一個你想測試的'Repo'的實例? – MadProgrammer
@MadProgrammer:我沒有那麼做 –
爲什麼不寫一個期待''Repo''('public static void test(Repo repo)')的測試方法,那麼它傳遞給它的實例無關緊要,'test(new Git());'?? – MadProgrammer