簡體   English   中英

在JUnit測試中從SimpleFileVisitor強制失敗

[英]Forcing failure from SimpleFileVisitor in a JUnit test

我實現了一個名為InspectFiles的類,該類擴展了SimpleFileVisitor,可與Files.walkFileTree一起使用。

我正在使用InspectFiles來檢查目錄及其子目錄中文件的內容。 當檢測到任何特定字符之一時,我能否通過InspectFiles進行測試? InspectFiles.visitFile()不在測試類范圍內時,這樣做很麻煩。

@Test
public void invalidPunctuationTest() throws IOException {
    Path startingDir = dir.toPath();
    InspectFiles inspector = new InspectFiles();

    Files.walkFileTree(startingDir, inspector);
}

public class InspectFiles extends SimpleFileVisitor<Path> {
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attr) throws IOException {

        try {
            File currentFile = new File(file.toString());
            InputStreamReader stream = new InputStreamReader(new FileInputStream(currentFile));
            for (int i = stream.read(); i != -1; i = stream.read()) {
                char c = (char) i;

                if (c == '’' || c == '–') {
                    throw new AssertionError();
                }
            }
        }
        catch (final IOException e) {
            e.printStackTrace();
        }
        catch (final AssertionError e) {
            System.err.println(e + " This file contains erroneous characters: " + file.toString());
            e.printStackTrace();
        }
        return FileVisitResult.CONTINUE;
    }
}

您可以使用系統規則庫測試是否將錯誤消息“此文件包含錯誤字符”寫入System.err。

@Rule
public final StandardErrorStreamLog log = new StandardErrorStreamLog();

@Test
public void invalidPunctuationTest() throws IOException {
  Path startingDir = dir.toPath();
  InspectFiles inspector = new InspectFiles();
  Files.walkFileTree(startingDir, inspector);
  assertFalse(log.getLog().contains("This file contains erroneous characters"));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM