如何编写解析JSON响应并校验字段规则的JUnit测试用例
JUnit JSON字段校验测试实现方案
你当前已完成JSON文件读取、根结构解析的基础逻辑,可按照以下逻辑补全校验规则:
实现思路
- 遍历
data数组内所有JSON对象,避免仅校验首个元素导致漏测 - 对每个对象先读取
valuesdata字段的布尔值 - 分支校验必填字段:
valuesdata为true时验证values字段存在,为false时验证sql字段存在
完整可运行代码
import org.json.JSONArray; import org.json.JSONObject; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import java.nio.file.Files; import java.nio.file.Paths; public class JsonStructureTest { // 替换为你的JSON文件实际路径 private static final String INPUT_FILE_PATH = "your_test_json_path.json"; @Test @DisplayName("校验JSON中valuesdata与配套字段的对应关系") public void validateJsonValuesdataRule() throws Exception { // 读取JSON文件内容 String content = new String(Files.readAllBytes(Paths.get(INPUT_FILE_PATH))); JSONObject rootJson = new JSONObject(content); JSONArray dataArray = rootJson.getJSONArray("data"); // 遍历所有data元素校验规则 for (int i = 0; i < dataArray.length(); i++) { JSONObject currentObj = dataArray.getJSONObject(i); boolean isValuesData = currentObj.getBoolean("valuesdata"); if (isValuesData) { // valuesdata为true时必须存在values字段 Assertions.assertTrue(currentObj.has("values"), String.format("第%d个元素valuesdata为true,但缺失values字段", i)); } else { // valuesdata为false时必须存在sql字段 Assertions.assertTrue(currentObj.has("sql"), String.format("第%d个元素valuesdata为false,但缺失sql字段", i)); } } } }
注意事项
- 上述代码使用JUnit 5的
Assertions类做断言,和你使用的@Test、@DisplayName注解版本保持统一,无需混用JUnit 4的Assert类 - 断言中补充了元素位置的错误提示,测试不通过时可直接定位到出错的JSON节点,排查效率更高
内容的提问来源于stack exchange,提问作者Divyesh Kumar
相关产品推荐
相关产品推荐

