【问题标题】:JUnit - Java - How to test void method with List of file as parameterJUnit - Java - 如何使用文件列表作为参数测试 void 方法
【发布时间】:2017-12-03 17:44:49
【问题描述】:

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

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

【问题讨论】:

    标签: java methods junit collections void


    【解决方案1】:
    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#)的主要原因之一......

    【讨论】:

    • @Timothty Truckle:我要试试你的解决方案
    • @Timothty Truckle:它给我contains 错误,红色
    • @Timothty Truckle: hasItem 编译器也是一个错误
    • 我需要仔细检查,但我现在有一个:java.lang.NullPointerException
    【解决方案2】:

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

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

    【讨论】:

    • 方法搜索并将文件放入目录中。我已经升级了所有班级的问题
    • IMO Timothy 的评论结束了讨论 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2019-08-20
    • 1970-01-01
    相关资源
    最近更新 更多