在JUnit中使用@Rule測試檔案和目錄
伴隨JUnit中 TemporaryFolder @Rule
的出現,測試檔案和目錄變得簡單了。
在 JUnit 中,規則(@Rule)可作為構造測試用具(fixture)時初始化方法和清理方法的替代和補充(在 JUnit 中,這2種方法分別通過以下註解標註:org.junit.Before
、org.junit.After
、org.junit.BeforeClass
和 org.junit.AfterClass
) 。而且規則的功能更加強大並且也更易於在專案和類之間共享。
譯者注:測試用具是指作為測試執行基準的一組物件所呈現的一個穩定狀態。其目的是確保測試是執行在一個眾所周知的、穩定的環境中的,以實現測試的可重複執行。準備輸入資料、生成模擬物件(Mock)、將特定的資料載入到資料庫、複製一組特定的檔案等,這些都屬於構造測試用具。
待測試的程式碼
public void writeTo(String path, String content) throws IOException { Path target = Paths.get(path); if (Files.exists(target)) { throw new IOException("file already exists"); } Files.copy(new ByteArrayInputStream(content.getBytes("UTF8")), target); }
測試類
public class FileWriterTest { private FileWriter fileWriter = new FileWriter(); @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @Rule public ExpectedException thrown = ExpectedException.none(); @Test public void throwsErrorWhenTargetFileExists() throws IOException { // arrange File output = temporaryFolder.newFile("output.txt"); thrown.expect(IOException.class); thrown.expectMessage("file already exists"); // act fileWriter.writeTo(output.getPath(), "test"); } @Test public void writesContentToFile() throws IOException { // arrange File output = temporaryFolder.newFolder("reports") .toPath() .resolve("output.txt") .toFile(); // act fileWriter.writeTo(output.getPath(), "test"); // assert assertThat(output) .hasContent("test") .hasExtension("txt") .hasParent(resolvePath("reports")); } private String resolvePath(String folder) { return temporaryFolder .getRoot().toPath() .resolve(folder) .toString(); } }
譯者注:第35行的 assertThat() 是類 org.assertj.core.api.Assertions 中的靜態方法。
TemporaryFolder 提供了2個方法 newFile
和 newFolder
,分別用於管理檔案和目錄。這2個方法都可以返回所需要的物件。返回的檔案或目錄都是由 setup
方法建立的並被存放在臨時目錄中。要想獲取臨時目錄自身的路徑,可以使用 TemporaryFolder
的 getRoot
方法。
無論測試成功與否,任何在測試過程中新增到臨時目錄的檔案或目錄都會在測試結束時刪除。
本示例可以從我在 GitHub 上的專案 unit-testing-demo 中找到,除此之外該專案中還有很多其他示例可供諸位參考。
相關文章
- 安卓單元測試 (八):Junit Rule 的使用安卓
- 在 Linux 中如何歸檔檔案和目錄Linux
- junit 使用JUnit測試預期異常
- 約束前端專案中的目錄和檔名前端
- PHP遍歷目錄和檔案PHP
- Linux檔案和目錄管理Linux
- Linux中使用rsync——檔案和目錄排除列表Linux
- Linux檔案系統-目錄和檔案管理Linux
- Playwright使用Typescript實現在測試case檔案中呼叫另一個檔案中的方法TypeScript
- 使用JUnit進行單元測試
- 使用junit單元測試SpringMvcSpringMVC
- Junit 單元測試使用總結
- 8.var目錄下的檔案和目錄詳解
- JUnit測試方法
- 如何使用Rust查詢目錄中的所有 txt 檔案?Rust
- 介面測試書目錄
- 沒有目錄建目錄,沒有檔案建檔案
- JUnit 註解@Rule的工作原理
- 在Linux中用chattr和lsattr命令管理檔案和目錄屬性Linux
- Tomcat目錄和檔案講解Tomcat
- 在Linux中,日誌檔案通常儲存在哪些目錄?Linux
- junit 測試中各種斷言用法
- linux中許可權對檔案和目錄的作用Linux
- 使用SSHFS檔案系統通過SSH遠端掛在目錄
- dir 顯示目錄檔案和子目錄列表(轉)
- php在網站根目錄下寫檔案PHP網站
- Python 刪除目錄中特定檔案Python
- 【JUnit測試】總結
- JUnit單元測試
- Junit 單元測試.
- Junit 4 測試方法
- JUnit3.8的Junit單元測試.
- 在Linux中,檔案和目錄的許可權有何作用以及如何修改?Linux
- 無緩衝檔案IO和目錄操作
- 【ZIP】打包過濾指定目錄和檔案
- LINUXdu檢視目錄和檔案大小Linux
- SQLServeronLinux的檔案和目錄結構SQLServerLinux
- 使用 .htaccess 檔案禁用 Web 目錄列舉Web