JUnit - Java - 如何使用文件列表作为参数测试 void 方法

JUnit - Java - How to test void method with List of file as parameter

我有一个class里面有这个方法:

  public class DirectoryWalker {

        public void visitDirectory(String path,List<File> resultList )  {...}
        ...
        }

我想测试一下方法,我开始做了,如下图。

   @Test
        public void ListOfTheFiles(){

       List<File> result = directoryWalker.visitDirectory("pathFile", new ArrayList<File>());
       Assert.assertThat("path\File\0A54-4444-2441-D554.xml", is(result));

老实说,我有点困惑,因为这是我第一次尝试使用列表作为参数来测试 void 方法。

我需要这个文件:

"path\File\0A54-4444-2441-D554.xml

进入文件夹File

你能帮帮我吗?谢谢

编辑:当然这个指令是错误的,因为结果被初始化为文件列表:

 List<File> result = directoryWalker.visitDirectory(...);

全部class:

public class DirectoryWalker {

    public void visitDirectory(String path, List<File> resultList ) {

        File root = new File(path);

        File[] list = root.listFiles();

        for (File f : list) {
            if (f.isFile() &&  f.getName().toLowerCase().endsWith(".xml")) {
                resultList.add(f);
            } else if(f.isDirectory()) {
                visitDirectory(f.getAbsolutePath(),resultList);
            }
        }
    }
}

测试 void 方法就像测试它应该做的事情是否正确完成。你不能做像 result = class.method(...) 这样的事情,因为这个方法没有 return 任何值。

这个方法有什么作用?可能会有帮助...

Assert.assertThat("path\File\0A54-4444-2441-D554.xml", is(result));

您以错误的方式使用了断言。花样是:

 assertThat([ACTUAL_RESULT], [matcher]([EXPECTED_RESULT]))

你反其道而行之。

那么,如果预期结果是 List,那你为什么要将它与 String 进行比较?

应该是这样的:

 @Test
    public void ListOfTheFiles(){
    List<File> result = new ArrayList<>();
    directoryWalker.visitDirectory("pathFile", result);
   Assert.assertThat(result, hasItem(new File("path\File\0A54-4444-2441-D554.xml")));

顺便说一句:

避免在硬编码文件路径中使用反斜杠 (\)。请改用正斜杠 (/),因为这可确保与非 windows 系统的兼容性,这是使用 Java(而不是 C#)的主要原因之一...