当前位置: 首页 > 面试题库 >

如何对读取给定文件的方法进行单元测试

艾灿
2023-03-14
问题内容

我知道这有点天真。如何在不提供物理文件作为输入的情况下对这段代码进行单元测试。我是模仿和单元测试的新手。所以我不确定。请帮忙。

public static String fileToString(File file) throws IOException
{
    BufferedReader br = new BufferedReader(new FileReader(file));
    try {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
            sb.append(line);
            sb.append("\n");
            line = br.readLine();
        }
        return sb.toString();
    } finally {
        br.close();
    }
}

问题答案:

您可能应该重构您的方法。如您所知,将文件作为输入的方法很难测试。另外,它似乎是静态的,这对可测试性没有帮助。如果您将方法重写为:

public String fileToString(BufferedReader input) throws IOException

测试起来会容易得多。您将业务逻辑与读取文件的技术分开。据我了解,您的业务逻辑正在读取数据流并确保行尾为unix样式。

如果这样做,您的方法将是可测试的。您还使它更通用:它现在可以从文件,URL或任何类型的流中读取。更好的代码,更容易测试…



 类似资料:
  • 我陷入了单元测试场景的一个基本问题,并将感谢帮助。 我有一个类,它调用在DB中将标志设置为true。 我的测试: 我被要求测试并检查是否正在使用相关数据调用。 由于返回类型无效,我如何测试它?

  • 问题内容: 如果我有这样的控制器: 基本上,我从存储库中获取东西,然后将其投影到匿名类型中。 如何进行单元测试? 有一个名为的属性,但它的类型与我们预期的一样。 这是否意味着如果我想测试JSON对象是否具有我期望的属性(“ id”,“ name”,“ type”),我是否必须使用反射? 编辑: 这是我的测试: 但是我在循环中收到一个运行时错误,指出“对象不包含id的定义”。 当我将断点定义为匿名类

  • 我有一个触发器,当opportunity更新时触发,作为其中的一部分,我需要调用我们的API,并提供opportunity的一些详细信息。 根据Web上的许多建议,我创建了一个类,其中包含一个@Future方法来制作标注。 我试图捕获在@future方法中抛出的异常,但测试方法没有看到它。 测试中的类如下所示: 下面是单元测试: 现在,我已经读到,测试@future方法的方法是用测试来围绕调用。s

  • 本文向大家介绍对 Vue-Router 进行单元测试的方法,包括了对 Vue-Router 进行单元测试的方法的使用技巧和注意事项,需要的朋友参考一下 由于路由通常会把多个组件牵扯到一起操作,所以一般对其的测试都在 端到端/集成 阶段进行,处于测试金字塔的上层。不过,做一些路由的单元测试还是大有益处的。 对于与路由交互的组件,有两种测试方式: 使用一个真正的 router 实例 mock 掉 $r

  • 问题内容: 如何在单元测试中测试 hashCode()函数? 问题答案: 每当我覆盖equals和hash代码时,我都会按照Joshua Bloch在“ Effective Java”第3章中的建议编写单元测试。我确保equals和hash代码是自反的,对称的和可传递的。我还确保“不等于”对所有数据成员均正常工作。 当我检查对equals的调用时,我还要确保hashCode的行为符合预期。像这样:

  • 问题内容: 我正在使用javanica并注释我的hystrix命令方法,如下所示: 而且,我试图对我的后备方法进行单元测试,而不必直接调用它们,即,我想调用带注释的方法,并在抛出500错误后让它自然地流入后备方法。所有这些都在单元测试之外起作用。 在我的单元测试中,我正在使用springs 返回500个错误,这部分工作正常,但是在我的单元测试中Hystrix没有正确初始化。在测试方法的开始,我有: