JUnit - Java - 如何使用List of file作为参数测试void方法

时间:2017-12-03 17:44:49

标签: java methods junit collections void

我在这个方法中有一个类:

  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(...);

所有课程:

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);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

测试void方法就像测试它应该做什么做得恰当。你不能做像result = class.method(...)这样的事情,因为这个方法不会返回任何值。

这种方法有什么作用?它可能会有所帮助......

答案 1 :(得分:3)

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#)的一个主要原因......