214 lines
6.6 KiB
Python
214 lines
6.6 KiB
Python
|
from flask_app.货物标.技术参数要求提取后处理函数 import restructure_data
|
||
|
|
||
|
#注意!这里的期待输出有误
|
||
|
def test_restructure_data():
|
||
|
print("开始测试 restructure_data 函数...\n")
|
||
|
|
||
|
# 测试用例 1: 所有顶层键的值都是列表(二层结构)
|
||
|
data1 = {
|
||
|
"fruits": ["apple", "banana", "cherry"],
|
||
|
"vegetables": ["carrot", "lettuce", "spinach"],
|
||
|
"grains": ["rice", "wheat", "barley"]
|
||
|
}
|
||
|
expected1 = data1.copy()
|
||
|
result1 = restructure_data(data1)
|
||
|
print("测试用例 1: 所有顶层键的值都是列表(二层结构)")
|
||
|
print("输入:", data1)
|
||
|
print("预期输出:", expected1)
|
||
|
print("实际输出:", result1)
|
||
|
print("测试通过:", result1 == expected1, "\n")
|
||
|
|
||
|
# 测试用例 2: 所有顶层键的值都是字典,且已经是三层结构
|
||
|
data2 = {
|
||
|
"fruits": {
|
||
|
"citrus": ["orange", "lemon"],
|
||
|
"berries": ["strawberry", "blueberry"]
|
||
|
},
|
||
|
"vegetables": {
|
||
|
"root": ["carrot", "beet"],
|
||
|
"leafy": ["lettuce", "spinach"]
|
||
|
}
|
||
|
}
|
||
|
expected2 = data2.copy()
|
||
|
result2 = restructure_data(data2)
|
||
|
print("测试用例 2: 所有顶层键的值都是字典,且已经是三层结构")
|
||
|
print("输入:", data2)
|
||
|
print("预期输出:", expected2)
|
||
|
print("实际输出:", result2)
|
||
|
print("测试通过:", result2 == expected2, "\n")
|
||
|
|
||
|
# 测试用例 3: 混合的两层和三层结构
|
||
|
data3 = {
|
||
|
"fruits": ["apple", "banana"],
|
||
|
"vegetables": {
|
||
|
"root": ["carrot", "beet"],
|
||
|
"leafy": ["lettuce", "spinach"]
|
||
|
},
|
||
|
"grains": ["rice", "wheat"]
|
||
|
}
|
||
|
expected3 = {
|
||
|
"fruits": {"fruits": ["apple", "banana"]},
|
||
|
"vegetables": {
|
||
|
"root": ["carrot", "beet"],
|
||
|
"leafy": ["lettuce", "spinach"]
|
||
|
},
|
||
|
"grains": {"grains": ["rice", "wheat"]}
|
||
|
}
|
||
|
result3 = restructure_data(data3)
|
||
|
print("测试用例 3: 混合的两层和三层结构")
|
||
|
print("输入:", data3)
|
||
|
print("预期输出:", expected3)
|
||
|
print("实际输出:", result3)
|
||
|
print("测试通过:", result3 == expected3, "\n")
|
||
|
|
||
|
# 测试用例 4: 超过三层嵌套
|
||
|
data4 = {
|
||
|
"fruits": {
|
||
|
"citrus": {
|
||
|
"tropical": ["orange", "lemon"]
|
||
|
},
|
||
|
"berries": ["strawberry", "blueberry"]
|
||
|
},
|
||
|
"vegetables": ["carrot", "lettuce"]
|
||
|
}
|
||
|
expected4 = {
|
||
|
"fruits.citrus": {
|
||
|
"tropical": ["orange", "lemon"]
|
||
|
},
|
||
|
"fruits.berries": {
|
||
|
"berries": ["strawberry", "blueberry"]
|
||
|
},
|
||
|
"vegetables": {
|
||
|
"vegetables": ["carrot", "lettuce"]
|
||
|
}
|
||
|
}
|
||
|
result4 = restructure_data(data4)
|
||
|
print("测试用例 4: 超过三层嵌套")
|
||
|
print("输入:", data4)
|
||
|
print("预期输出:", expected4)
|
||
|
print("实际输出:", result4)
|
||
|
print("测试通过:", result4 == expected4, "\n")
|
||
|
|
||
|
# 测试用例 5: 超过四层嵌套
|
||
|
data5 = {
|
||
|
"animals": {
|
||
|
"mammals": {
|
||
|
"primates": {
|
||
|
"humans": ["Alice", "Bob"],
|
||
|
"monkeys": ["Charlie", "Dave"]
|
||
|
},
|
||
|
"carnivores": ["Lion", "Tiger"]
|
||
|
},
|
||
|
"birds": ["Eagle", "Parrot"]
|
||
|
},
|
||
|
"plants": ["Oak", "Pine"]
|
||
|
}
|
||
|
expected5 = {
|
||
|
"animals.mammals.primates": {
|
||
|
"humans": ["Alice", "Bob"],
|
||
|
"monkeys": ["Charlie", "Dave"]
|
||
|
},
|
||
|
"animals.mammals.carnivores": ["Lion", "Tiger"],
|
||
|
"animals.birds": ["Eagle", "Parrot"],
|
||
|
"plants": {"plants": ["Oak", "Pine"]}
|
||
|
}
|
||
|
result5 = restructure_data(data5)
|
||
|
print("测试用例 5: 超过四层嵌套")
|
||
|
print("输入:", data5)
|
||
|
print("预期输出:", expected5)
|
||
|
print("实际输出:", result5)
|
||
|
print("测试通过:", result5 == expected5, "\n")
|
||
|
|
||
|
# 测试用例 6: 空字典
|
||
|
data6 = {}
|
||
|
expected6 = {}
|
||
|
result6 = restructure_data(data6)
|
||
|
print("测试用例 6: 空字典")
|
||
|
print("输入:", data6)
|
||
|
print("预期输出:", expected6)
|
||
|
print("实际输出:", result6)
|
||
|
print("测试通过:", result6 == expected6, "\n")
|
||
|
|
||
|
# 测试用例 7: 顶层键的值类型无效
|
||
|
data7 = {
|
||
|
"fruits": "apple",
|
||
|
"vegetables": ["carrot", "lettuce"]
|
||
|
}
|
||
|
print("测试用例 7: 顶层键的值类型无效")
|
||
|
print("输入:", data7)
|
||
|
try:
|
||
|
restructure_data(data7)
|
||
|
print("预期结果: 引发 ValueError")
|
||
|
print("实际输出: 无异常")
|
||
|
print("测试通过: False\n")
|
||
|
except ValueError as ve:
|
||
|
print("预期结果: 引发 ValueError")
|
||
|
print("实际输出: 引发 ValueError:", ve)
|
||
|
print("测试通过:", "数据格式异常" in str(ve), "\n")
|
||
|
|
||
|
# 测试用例 8: 嵌套字典中存在无效的值类型
|
||
|
data8 = {
|
||
|
"fruits": {
|
||
|
"citrus": "orange",
|
||
|
"berries": ["strawberry", "blueberry"]
|
||
|
},
|
||
|
"vegetables": ["carrot", "lettuce"]
|
||
|
}
|
||
|
print("测试用例 8: 嵌套字典中存在无效的值类型")
|
||
|
print("输入:", data8)
|
||
|
try:
|
||
|
restructure_data(data8)
|
||
|
print("预期结果: 引发 ValueError")
|
||
|
print("实际输出: 无异常")
|
||
|
print("测试通过: False\n")
|
||
|
except ValueError as ve:
|
||
|
print("预期结果: 引发 ValueError")
|
||
|
print("实际输出: 引发 ValueError:", ve)
|
||
|
print("测试通过:", "数据格式异常" in str(ve), "\n")
|
||
|
|
||
|
# 测试用例 9: 复杂的嵌套结构
|
||
|
data9 = {
|
||
|
"fruits": {
|
||
|
"citrus": ["orange", "lemon"],
|
||
|
"berries": {
|
||
|
"summer": ["strawberry", "blueberry"],
|
||
|
"winter": ["cranberry"]
|
||
|
}
|
||
|
},
|
||
|
"vegetables": ["carrot", "lettuce"],
|
||
|
"grains": {
|
||
|
"whole": ["rice", "wheat"],
|
||
|
"refined": ["white rice"]
|
||
|
}
|
||
|
}
|
||
|
expected9 = {
|
||
|
"fruits.berries": {
|
||
|
"summer": ["strawberry", "blueberry"],
|
||
|
"winter": ["cranberry"]
|
||
|
},
|
||
|
"fruits.citrus": {
|
||
|
"citrus": ["orange", "lemon"]
|
||
|
},
|
||
|
"vegetables": {
|
||
|
"vegetables": ["carrot", "lettuce"]
|
||
|
},
|
||
|
"grains.whole": {
|
||
|
"whole": ["rice", "wheat"]
|
||
|
},
|
||
|
"grains.refined": {
|
||
|
"refined": ["white rice"]
|
||
|
}
|
||
|
}
|
||
|
result9 = restructure_data(data9)
|
||
|
print("测试用例 9: 复杂的嵌套结构")
|
||
|
print("输入:", data9)
|
||
|
print("预期输出:", expected9)
|
||
|
print("实际输出:", result9)
|
||
|
print("测试通过:", result9 == expected9, "\n")
|
||
|
|
||
|
print("所有测试用例已完成。")
|
||
|
|
||
|
# 运行测试
|
||
|
if __name__ == "__main__":
|
||
|
test_restructure_data()
|