我有以下课程:public class XXX { public <T> List<T> loadXXXList(Class<T> type, String fileName) { try { return new CsvToBeanBuilder<T>(new FileReader(fileName)).withSeparator('X') .withType(type).build().parse(); } catch (Exception e) { e.printStackTrace(); System.out.println("Error occurred while loading object list from file " + fileName); return Collections.emptyList(); } }}什么是测试它或重组它以进行测试、单元或集成的最佳方式。我正在考虑在返回 CsvToBeanBuilder 的类中创建一个新函数,我可以模拟它以引发异常或在 .parse() 上返回一个列表?就像是:public class XXX { public <T> List<T> loadXXXList(Class<T> type, String fileName) { try { return SOMETHING.parse(); } catch (Exception e) { e.printStackTrace(); System.out.println("Error occurred while loading object list from file " + fileName); return Collections.emptyList(); } } public SOMETHING something(type,filename){ return new CsvToBeanBuilder<T>(new FileReader(fileName)).withSeparator('X') .withType(type).build()}}但不知何故,我不相信这看起来不错,而且它只是将小东西的大复杂性缝合起来,它缝合我只是将逻辑移动到不同的地方。谢谢
1 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
不,您不应公开或模拟 CsvToBeanBuilder 等内部实现细节。你真正的外部依赖是文件系统,你需要在单元测试中模拟之前对其进行概括,因为在测试中创建临时文件是一种代码味道。
尝试重构您的类以接受 InputStream 而不是文件路径。这样,您可以编写一个完全在内存中工作的单元测试。
添加回答
举报
0/150
提交
取消