集成测试结构合理性排查与awsgluedq模块Mock方案咨询
Python Mock测试问题解决指南
1. 测试类结构与main_code导入问题
导入错误的修复方案
出现AttributeError: 'My_app.application' has no attribute 'main_code',核心原因是包结构或导入路径不对:
- 先确认
My_app/application目录下存在__init__.py文件(空文件即可),让Python识别这是合法可导入的包 - 若
main_code.py直接在My_app/application目录下,正确导入方式应为:# 导入整个模块 from My_app.application import main_code # 或直接导入要测试的目标函数/类 from My_app.application.main_code import your_target_func - 若测试文件不在项目根目录,需确保Python解释器的
PYTHONPATH包含项目根目录,避免路径查找失败
测试类结构建议
不管用unittest还是pytest,都遵循简洁聚焦的原则:
- 用
unittest的话,测试类继承unittest.TestCase,每个测试方法以test_开头:import unittest from unittest.mock import patch from My_app.application import main_code class TestMainCode(unittest.TestCase): def test_data_processing(self): # 单场景测试逻辑 pass - 用
pytest的话,无需继承类,直接写test_前缀的函数/类即可,结构更灵活 - 每个测试用例只验证单一功能,保持独立,避免相互依赖
2. Mock awsgluedq模块的两种方法
要避免本地安装awsgluedq,可以通过以下方式Mock整个模块:
方法一:全局提前Mock模块
在测试文件最开头,给sys.modules添加Mock对象,让Python认为模块已存在:
import sys from unittest.mock import Mock # 模拟awsgluedq主模块 sys.modules['awsgluedq'] = Mock() # 如果有子模块需要用到,同样Mock sys.modules['awsgluedq.some_submodule'] = Mock() # 之后再导入main_code就不会触发ModuleNotFoundError from My_app.application import main_code
方法二:用@patch装饰器针对特定用例Mock
如果只需要在部分测试用例中Mock该模块,使用patch装饰器指定main_code中导入的awsgluedq路径:
import unittest from unittest.mock import patch, Mock from My_app.application import main_code class TestMainCode(unittest.TestCase): @patch('main_code.awsgluedq') def test_glue_dq_logic(self, mock_gluedq): # 给Mock对象设置预期返回值 mock_gluedq.run_ruleset.return_value = {"status": "passed"} # 执行要测试的函数 result = main_code.run_data_quality_checks() # 断言逻辑 self.assertEqual(result["status"], "passed")
额外提示:Mock csvReader和dataframeWriter
针对这两个需要替换的函数,同样用patch指定导入路径即可:
@patch('main_code.dataframeWriter') @patch('main_code.csvReader') def test_integration_flow(self, mock_reader, mock_writer): # 设置mock_reader返回本地测试数据 mock_reader.return_value = your_test_dataframe # 执行主逻辑 main_code.process_data() # 断言writer是否按预期调用 mock_writer.assert_called_once_with(expected_output_data)
内容的提问来源于stack exchange,提问作者Haha
相关产品推荐
相关产品推荐

