猿问

测试具有外部依赖关系的类的最佳方法是什么

我有以下课程:


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()

}

}

但不知何故,我不相信这看起来不错,而且它只是将小东西的大复杂性缝合起来,它缝合我只是将逻辑移动到不同的地方。谢谢



森栏
浏览 101回答 1
1回答

紫衣仙女

不,您不应公开或模拟 CsvToBeanBuilder 等内部实现细节。你真正的外部依赖是文件系统,你需要在单元测试中模拟之前对其进行概括,因为在测试中创建临时文件是一种代码味道。尝试重构您的类以接受 InputStream 而不是文件路径。这样,您可以编写一个完全在内存中工作的单元测试。
随时随地看视频慕课网APP

相关分类

Java
我要回答