【发布时间】:2021-04-17 15:47:39
【问题描述】:
我在单元测试中从模拟开始。想升级使用文件的方法。 带有一些字符串或数字的模拟工作,但现在代码测试失败。 我有方法类:
public class FileService {
public List<File> findFilesUsingSuffix(File root, String suffix) {
List<File> list = new ArrayList<>();
if (root.isDirectory()) {
File[] files = root.listFiles();
if (files != null) {
for (File file : files) {
list.addAll(findFilesUsingSuffix(file, suffix));
}
}
} else if (root.getName().endsWith(suffix)) {
list.add(root);
}
return list;
}
}
和测试:
public class FileServiceTest {
private FileService fileService;
private TemporaryFolder temporaryFolder;
@Before
public void setUp() throws Exception {
fileService = mock(FileService.class);
temporaryFolder = mock(TemporaryFolder.class);
File file1 = temporaryFolder.newFile("file.java");
File file2 = temporaryFolder.newFile("file.swf");
File file3 = temporaryFolder.newFile("file2.java");
File file4 = temporaryFolder.newFile("picture.jpg");
File file5 = temporaryFolder.newFile("photo.jpg");
File file6 = temporaryFolder.newFile("movie.mp4");
File file7 = temporaryFolder.newFile("music.mp3");
File file8 = temporaryFolder.newFile("someFile.java");
File file9 = temporaryFolder.newFile("someDoc.doc");
File file10 = temporaryFolder.newFile("excelThing.xls");
File file11 = temporaryFolder.newFolder("java");
}
@Test
public void findFilesUsingSuffixIsTrue() throws IOException {
//given
List<File> expectedList = List.of(
new File("file.java"), new File("file2.java"), new File("someFile.java")
);
when(fileService.findFilesUsingSuffix(ArgumentMatchers.any(File.class),any(String.class))).thenCallRealMethod();
//when
List<File> result = fileService.findFilesUsingSuffix(temporaryFolder.getRoot(), ".java");
//then
assertEquals(expectedList, result);
}
}
我得到的结果是空列表,但我知道我做错了什么
【问题讨论】:
-
TemporaryFolder类是什么,为什么要嘲笑该类? -
您在滥用
TemporaryFolder。您在模拟上调用未存根的方法 - 它们被完全忽略。下定决心:要么使用 TemporaryFolder 和真实文件,要么使用模拟。模拟一个未被测试方法使用的类是没有意义的
标签: java unit-testing testing mockito