2014-04-02 120 views
0

我实现了一个名为InspectFiles的类,该类扩展了SimpleFileVisitor,与Files.walkFileTree一起使用。在JUnit测试中强制SimpleFileVisitor失败

我使用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; 
    } 
} 

回答

1

您可以通过使用图书馆System Rules

@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")); 
} 
测试错误消息是否“此文件包含错误的字符”已被写入System.err的