代码之家  ›  专栏  ›  技术社区  ›  user1796624

使用外部依赖项测试类的最佳方法是什么[关闭]

  •  0
  • user1796624  · 技术社区  · 6 年前

    我有以下课程:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Mateusz Stefek    6 年前

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

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