用外部依赖测试类的最佳方法是什么

时间:2019-01-28 23:22:00

标签: java unit-testing junit

我有以下课程:

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 个答案:

答案 0 :(得分:1)

不。您不应该公开或模拟CsvToBeanBuilder之类的内部实现细节。 您真正的外部依赖关系是文件系统,在进行单元测试进行模拟之前需要对其进行概括,因为在测试中创建临时文件是一种代码味道。

尝试重构您的类以接受InputStream而不是文件路径。这样,您可以编写一个完全在内存中工作的单元测试。