junit rule_使用@Rule在JUnit中测试文件和目录
junit rule
多虧了TemporaryFolder @Rule在JUnit中使用文件和目錄進行測試很容易。
在JUnit中,規則( @Rule )可以用作夾具設置和清除方法( org.junit.Before , org.junit.After , org.junit.BeforeClass和org.junit.AfterClass )的替代或補充,但是它們功能更強大,并且可以更輕松地在項目和類之間共享。
要測試的代碼
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); }上面的方法可以將給定的String內容寫入不存在的文件。 有兩種情況可以測試。
考試
public class FileWriterTest {private FileWriter fileWriter = new FileWriter();@Rulepublic TemporaryFolder temporaryFolder = new TemporaryFolder();@Rulepublic ExpectedException thrown = ExpectedException.none();@Testpublic void throwsErrorWhenTargetFileExists() throws IOException {// arrangeFile output = temporaryFolder.newFile("output.txt");thrown.expect(IOException.class);thrown.expectMessage("file already exists");// actfileWriter.writeTo(output.getPath(), "test");}@Testpublic void writesContentToFile() throws IOException {// arrangeFile output = temporaryFolder.newFolder("reports").toPath().resolve("output.txt").toFile();// actfileWriter.writeTo(output.getPath(), "test");// assertassertThat(output).hasContent("test").hasExtension("txt").hasParent(resolvePath("reports"));}private String resolvePath(String folder) {return temporaryFolder.getRoot().toPath().resolve(folder).toString();} }TemporaryFolder規則提供了兩種方法來管理文件和目錄: newFile和newFolder 。 兩種方法都會在setup方法中創建的臨時文件夾下返回所需的對象。 如果需要臨時文件夾本身的路徑,則可以使用TemporaryFolder getRoot方法。
無論測試成功與否,在測試完成時將添加到temp文件夾中的所有內容都將自動刪除。
這個例子可以在我在GitHub上的unit-testing-demo項目中找到,還有許多其他例子。
翻譯自: https://www.javacodegeeks.com/2015/01/testing-with-files-and-directories-in-junit-with-rule.html
junit rule
總結
以上是生活随笔為你收集整理的junit rule_使用@Rule在JUnit中测试文件和目录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jface_使用JFace Viewer
- 下一篇: 手游部落安卓模拟器下载(手游部落安卓模拟