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