gpt4 book ai didi

java - 如何编写单元测试来涵盖抛出 IOException 的情况?

转载 作者:搜寻专家 更新时间:2023-10-31 20:30:35 27 4
gpt4 key购买 nike

我有以下类(class):

    public class FileLoader {   

private Map<Brand, String> termsOfUseText = new HashMap<Brand, String>();

public void load() {
for (Brand brand : Brand.values()) {
readAndStoreTermsOfUseForBrand(brand);
}
}

private void readAndStoreTermsOfUseForBrand(Brand brand) {
String resourceName = "termsOfUse/" + brand.name().toLowerCase() + ".txt";
InputStream in = this.getClass().getClassLoader().getResourceAsStream(resourceName);
try {
String content = IOUtils.toString(in);
termsOfUseText.put(brand, content);
} catch (IOException e) {
throw new IllegalStateException(String.format("Failed to find terms of use source file %s", resourceName),e);
}
}

public String getTextForBrand(Brand brand) {
return termsOfUseText.get(brand);
}
}

Brand 是一个枚举,我需要所有有效的 .txt 文件都在类路径中。如果 Brand 枚举包含所有有效品牌,因此它们的所有 .txt 文件都存在,我该如何使 IOException 发生?

欢迎提出有关重构当前代码的建议,前提是它更易于测试!

最佳答案

我马上看到的三个选项:

  1. 使用PowerMock模拟 IOUtils.toString()。我认为 PowerMock 是最后的选择。我宁愿将源代码重构为对测试更友好的东西。
  2. 提取 IOUtils 对 protected 方法的调用。创建类的特定于测试的子类,以覆盖此方法并抛出 IOException。
  3. 将创建的 InputStream 提取到 protected 方法中。创建一个特定于测试的子类来覆盖该方法并返回一个模拟 InputStream。

关于java - 如何编写单元测试来涵盖抛出 IOException 的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6701477/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com