我在这个方法中有一个类:
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);
}
}
}
}
答案 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#)的一个主要原因......