package main import ( "encoding/json" "os" "testing" ) // 测试JSON解析 func TestJSONParsing(t *testing.T) { // 读取JSON文件 data, err := os.ReadFile("../practice_question_pool.json") if err != nil { t.Fatalf("读取JSON文件失败: %v", err) } // 解析JSON var groups []JSONQuestionGroup if err := json.Unmarshal(data, &groups); err != nil { t.Fatalf("解析JSON失败: %v", err) } t.Logf("成功解析 %d 个题目组", len(groups)) // 检查每个题目组的类型信息 for i, group := range groups { t.Logf("\n题目组 %d:", i+1) t.Logf(" Type: %s", group.Type) t.Logf(" TypeName: %s", group.TypeName) t.Logf(" 题目数量: %d", len(group.List)) // 检查类型映射 t.Logf(" 原始类型: %s", group.Type) // 检查是否为空 if group.Type == "" { t.Errorf(" ❌ 题目组 %d 的 Type 为空!", i+1) } if group.TypeName == "" { t.Errorf(" ❌ 题目组 %d 的 TypeName 为空!", i+1) } if len(group.List) == 0 { t.Errorf(" ❌ 题目组 %d 的题目列表为空!", i+1) } } } // 测试单个题目组解析 func TestSingleGroupParsing(t *testing.T) { // 测试第一个题目组(填空题,type在list之后) jsonStr1 := `{ "list": [{"id": "1", "question": "test", "answers": ["answer1"]}], "type": "fill-in-blank", "typeName": "填空题" }` var group1 JSONQuestionGroup if err := json.Unmarshal([]byte(jsonStr1), &group1); err != nil { t.Fatalf("解析题目组1失败: %v", err) } t.Logf("题目组1 - Type: %s, TypeName: %s, 题目数: %d", group1.Type, group1.TypeName, len(group1.List)) // 测试第二个题目组(type在list之前) jsonStr2 := `{ "type": "fill-in-blank", "typeName": "填空题", "list": [{"id": "1", "question": "test", "answers": ["answer1"]}] }` var group2 JSONQuestionGroup if err := json.Unmarshal([]byte(jsonStr2), &group2); err != nil { t.Fatalf("解析题目组2失败: %v", err) } t.Logf("题目组2 - Type: %s, TypeName: %s, 题目数: %d", group2.Type, group2.TypeName, len(group2.List)) // 验证两种顺序解析结果是否一致 if group1.Type != group2.Type || group1.TypeName != group2.TypeName { t.Errorf("不同字段顺序导致解析结果不一致!") } else { t.Log("✓ JSON字段顺序不影响解析结果") } }