我有一個 Java 程式,它從終端讀取用戶命令(直到他鍵入exit)并執行一些計算。
代碼如下所示:
public static void main(String[] args) {
String command = read_from_stdin();
while (!command.equals("exit")) {
String output = execute(command)
System.out.println(output);
command = read_from_stdin();
}
}
private String execute(String command) {...}
問題是:如何測驗私有execute方法?
通過公共
main功能進行測驗。這需要不是從終端而是從某個檔案將輸入提供給主程式。這個測驗可能不是 Java 單元測驗,而是一些 shell 腳本。呸。為它執行
public并撰寫Java測驗。private/public這不會打破使用訪問修飾符的想法嗎?
還有其他想法嗎?
更新
一些評論建議重構execute為一個單獨的類。所以如果我做這樣的事情:
class Executor {
public String execute(String command) {...}
}
class Main {
public static void main(String[] args) {
Executor executor = new Executor();
String command = read_from_stdin();
while (!command.equals("exit")) {
String output = executor.execute(command);
System.out.println(output);
command = read_from_stdin();
}
}
}
那么當然,我現在可以對公共Executorapi 進行單元測驗。但這在概念上與execute公開不一樣(如果不一樣,那為什么會更好)?
uj5u.com熱心網友回復:
您不應該測驗私有方法,這就像您測驗以具體方式實作的某些東西,而不是測驗功能。如果你需要測驗一些私有的東西,那么它很有可能一開始就應該是公開的。看看你的例子,這對我來說就是這種情況。
在開始測驗之前,我會重構代碼。
- 為每個命令創建一個執行器。現在您可以分別測驗每個執行程式以正確處理命令。
- 制作某種調度程式/策略/工廠,為命令實體化正確的執行程式。如果選擇了正確的執行器,您現在可以測驗邏輯。
編輯:為了解決您的其他問題,這在概念上與簡單地更改訪問修飾符不同。這種方法將職責拆分為彼此獨立的單元。目前,您的主類至少有 3 個職責 - 輸入/輸出、根據命令選擇要執行的正確邏輯并執行所述邏輯。這違反了SOLID的單一責任原則:
改變班級的理由不應該不止一個。換句話說,每個班級應該只有一個職責。
這種方法比較好,因為它會使代碼更符合撰寫易于擴展和易于維護的代碼的原則。
uj5u.com熱心網友回復:
有時你不想花更多的精力把所有東西都提取出來。有時,由于各種原因,您無法尋求最佳實踐。
解決這個問題的一個很好的方法是使方法包私有(洗掉私有)。如果您的測驗在同一個包中,那么您可以訪問該方法并直接對其進行測驗。
我個人還會添加@VisibleForTesting 以明確說明由于測驗原因可以訪問此方法。
一般來說,有時很少這樣做,并且總是指向一些錯誤的設計。
uj5u.com熱心網友回復:
通常的做法是在單獨的類中提取方法并測驗該類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/512518.html
標籤:爪哇单元测试测试
