junit rule_使用@Rule在JUnit中测试文件和目录
junit rule
多虧了TemporaryFolder @Rule在JUnit中使用文件和目錄進(jìn)行測(cè)試很容易。
在JUnit中,規(guī)則( @Rule )可以用作夾具設(shè)置和清除方法( org.junit.Before , org.junit.After , org.junit.BeforeClass和org.junit.AfterClass )的替代或補(bǔ)充,但是它們功能更強(qiáng)大,并且可以更輕松地在項(xiàng)目和類之間共享。
要測(cè)試的代碼
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內(nèi)容寫入不存在的文件。 有兩種情況可以測(cè)試。
考試
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規(guī)則提供了兩種方法來(lái)管理文件和目錄: newFile和newFolder 。 兩種方法都會(huì)在setup方法中創(chuàng)建的臨時(shí)文件夾下返回所需的對(duì)象。 如果需要臨時(shí)文件夾本身的路徑,則可以使用TemporaryFolder getRoot方法。
無(wú)論測(cè)試成功與否,在測(cè)試完成時(shí)將添加到temp文件夾中的所有內(nèi)容都將自動(dòng)刪除。
這個(gè)例子可以在我在GitHub上的unit-testing-demo項(xiàng)目中找到,還有許多其他例子。
翻譯自: https://www.javacodegeeks.com/2015/01/testing-with-files-and-directories-in-junit-with-rule.html
junit rule
總結(jié)
以上是生活随笔為你收集整理的junit rule_使用@Rule在JUnit中测试文件和目录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jface_使用JFace Viewer
- 下一篇: jboss调jvm参数_在同一台机器上启