You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JUnit测试中无法写入JSON文件的问题排查

JUnit测试中函数无法写入JSON文件的问题排查

问题背景

编写了一个读取YAML输入、输出JSON结果的函数,该函数在正常运行时能正常写入文件,但在JUnit测试中调用时无法生成目标文件,执行读取文件的代码时抛出文件找不到异常。

相关代码

待测试函数代码

public void computeFunction(Object input, String pathToOutput) {
  doSomething(input);
  String outputFile = pathToOutput + "/x1.json";
  ObjectMapper mapper = new ObjectMapper();
  mapper.writeValue(new File(outputFile), x1);
}

JUnit测试代码

@Rule
public TemporaryFolder folder = new TemporaryFolder();

@Test
public void testFunction() throws Exception {
  File pathToOutput = folder.newFolder("results");
  String x1 = "input";
  Object input = new Object(x1);
  computeFunction(input, pathToOutput.getAbsolutePath());
  ObjectMapper mapper = new ObjectMapper();
  List<Object> output = mapper.readValue(new File(pathToOutput + "x1.json"), new TypeReference<List<Object>>(){});
  assertEquals(val1, output.getValOne());
  assertEquals(val2, output.getValTwo());
}

抛出的异常

java.io.FileNotFoundException: /tmp/junitxxxxx/results/x1.json

问题原因

  1. 测试代码路径拼接错误:测试中读取文件时,直接将File对象pathToOutput与字符串"x1.json"拼接,会导致最终路径变成/tmp/junitxxxxx/resultsx1.json(缺少目录与文件名之间的斜杠),而函数实际写入的路径是/tmp/junitxxxxx/results/x1.json,因此测试代码找不到正确的文件。
  2. (注:函数代码中x1变量未明确展示赋值逻辑,若实际代码中该变量未被doSomething(input)正确赋值,也可能导致写入失败,但根据你描述测试外运行正常,推测是示例代码笔误)

修复方案

修改测试代码中读取文件的路径拼接方式,推荐使用File构造函数自动处理路径分隔符,或正确拼接绝对路径:

修复后的测试代码片段

@Test
public void testFunction() throws Exception {
  File pathToOutput = folder.newFolder("results");
  String x1 = "input";
  Object input = new Object(x1);
  computeFunction(input, pathToOutput.getAbsolutePath());
  ObjectMapper mapper = new ObjectMapper();
  
  // 方式1:使用File构造函数,自动适配系统路径分隔符
  File outputFile = new File(pathToOutput, "x1.json");
  
  // 方式2:手动拼接绝对路径时添加斜杠
  // File outputFile = new File(pathToOutput.getAbsolutePath() + "/x1.json");
  
  List<Object> output = mapper.readValue(outputFile, new TypeReference<List<Object>>(){});
  assertEquals(val1, output.getValOne());
  assertEquals(val2, output.getValTwo());
}

同时需确保computeFunction中的x1变量已被doSomething(input)正确赋值,否则即使路径正确,也会因无有效数据导致写入异常。

内容的提问来源于stack exchange,提问作者amagro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:17:18