""" 测试用户提供的4个标准规范 验证模糊名称匹配修复是否有效 """ import asyncio import sys import os # 添加项目根目录到 Python 路径 current_dir = os.path.dirname(os.path.abspath(__file__)) project_root = os.path.dirname(os.path.dirname(current_dir)) if project_root not in sys.path: sys.path.insert(0, project_root) from utils_test.standard_new_Test.standard_service import ( StandardMatchingService, MatchResultCode ) async def test_user_standards(): """测试用户提供的4个标准""" # 初始化服务(使用Mock数据) service = StandardMatchingService(db_pool=None) await service.initialize() # 用户提供的4个标准 test_standards = [ {"standard_name": "铁路桥涵设计规范", "standard_number": "TB 10002-2017"}, {"standard_name": "铁路工程抗震设计规范", "standard_number": "GB 50111-2006"}, {"standard_name": "铁路混凝土工程施工质量验收标准", "standard_number": "TB 10424-2018"}, {"standard_name": "公路水运危险性较大工程专项施工方案编制审查规程", "standard_number": "JT/T 1495-2023"}, ] print("=" * 80) print("测试用户提供的4个标准(使用Mock数据)") print("=" * 80) results = service.check_standards(test_standards) all_passed = True for i, result in enumerate(results, 1): print(f"\n【{i}】{result.original_name}") print(f" 标准号: {result.original_number}") print(f" 状态码: {result.status_code}") print(f" 处理结果: {result.process_result}") print(f" 最终结果: {result.final_result}") # 验证预期结果 if i <= 3: # 前3个应该是 OK if result.status_code != MatchResultCode.OK.value: print(f" [失败] 期望 OK,实际 {result.status_code}") all_passed = False else: print(f" [通过]") else: # 第4个应该是 MISMATCH(因为Mock数据中是2024版) if result.status_code != MatchResultCode.MISMATCH.value: print(f" [失败] 期望 MISMATCH,实际 {result.status_code}") all_passed = False else: print(f" [通过]") print("\n" + "=" * 80) if all_passed: print("[成功] 所有测试通过!") else: print("[失败] 部分测试失败!") print("=" * 80) return all_passed def test_with_bookname_variations(): """测试书名号变体""" from utils_test.standard_new_Test.standard_service import StandardRepository, StandardMatcher print("\n" + "=" * 80) print("测试书名号变体匹配") print("=" * 80) # 创建仓库并加载测试数据 repo = StandardRepository() mock_data = [ {"id": 1, "standard_name": "铁路桥涵设计规范", "standard_number": "TB 10002-2017", "validity": "XH"}, ] repo.load_data(mock_data) matcher = StandardMatcher(repo) # 测试各种名称变体 test_cases = [ ("铁路桥涵设计规范", "TB 10002-2017", "无书名号"), ("《铁路桥涵设计规范》", "TB 10002-2017", "带书名号"), ("铁路桥涵 设计规范", "TB 10002-2017", "带空格"), ("《铁路桥涵 设计规范》", "TB 10002-2017", "带书名号和空格"), ] all_passed = True for name, number, desc in test_cases: result = matcher.match(1, name, number) status = "[OK]" if result.status_code == MatchResultCode.OK.value else "[FAIL]" print(f"\n{status} {desc}") print(f" 输入名称: {name}") print(f" 结果: {result.status_code}") if result.status_code != MatchResultCode.OK.value: all_passed = False return all_passed if __name__ == "__main__": # 运行异步测试 result1 = asyncio.run(test_user_standards()) # 运行书名号变体测试 result2 = test_with_bookname_variations() print("\n" + "=" * 80) if result1 and result2: print("[成功] 所有测试通过!修复成功。") sys.exit(0) else: print("[警告] 部分测试失败!") sys.exit(1)