首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

測試驅動開發 (TDD) 實戰日誌:從用戶故事到紅綠重構,FileInfo 類別逐步演進

     編輯:Java 綜合教學

測試驅動開發 (TDD) 實戰日誌

專案目標:掃描磁盤特定格式檔案,儲存路徑資訊,支援搜尋與開啟定位。採用 TDD 循環:紅(失敗)→ 綠(通過)→ 重構。

第一輪:FileInfo 實體類別

1. 編寫失敗測試

@Test
public void testToStringFormat() {
    FileInfo info = new FileInfo("a.txt", "c:\\", "c:\\a.txt", "2016-01-01");
    assertEquals("a.txt###c:\\###c:\\a.txt###2016-01-01", info.toString());
}

→ 編譯錯誤:FileInfo 不存在

2. 建立最小實作使測試通過

public class FileInfo {
    private String fileName, fileDir, filePath, lastUpdate;

    public FileInfo(String fileName, String fileDir, String filePath, String lastUpdate) {
        this.fileName = fileName;
        this.fileDir = fileDir;
        this.filePath = filePath;
        this.lastUpdate = lastUpdate;
    }

    @Override
    public String toString() {
        return fileName + "###" + fileDir + "###" + filePath + "###" + lastUpdate;
    }
}

→ 測試通過(綠燈)

3. 重構:提取分隔符常數

private static final String DELIMITER = "###";
// toString 使用 DELIMITER
// 新增測試驗證分隔符可配置性(暫不實作,待需求驅動)

第二輪:平面檔案存儲

設計

  • 檔案名:fileDB
  • 每行一筆 FileInfo.toString()
  • 讀取 → List<FileInfo>;寫入 → 格式化字串
  • 特定格式以正則匹配

測試優先:FileStorage 類別

@Test
public void testSaveAndLoad() throws IOException {
    FileStorage storage = new FileStorage(tempFolder.newFile("fileDB"));
    FileInfo info = new FileInfo("test.java", "/src", "/src/test.java", "2024-01-01");
    storage.save(info);
    List list = storage.loadAll();
    assertEquals(1, list.size());
    assertEquals(info.toString(), list.get(0).toString());
}

TDD 核心心法

  1. 測試先行:測試即規格文件,倒逼設計
  2. 小步子:每次只讓一個測試通過
  3. 不預設實作:只寫讓測試過的最簡代碼
  4. 重構在綠燈時:安全網下大膽改善結構
  5. 拒絕過度設計:分隔符常數化等優化等到真正需要時再做

下一步迭代規劃

  • FileStorage 完整實作(讀/寫/搜尋)
  • 檔案掃描服務(遞迴遍歷、正則過濾)
  • 搜尋介面(檔名模糊匹配)
  • 桌面整合(JNI/ProcessBuilder 開啟資料夾定位檔案)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved