You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pytest测试Python模块中的__main__.py文件?

解决pytest中导入本地__main__.py的问题

问题原因

当用pytest运行测试时,pytest自身的入口脚本会被当作__main__模块,所以直接import __main__会导入pytest的__main__.py,而非你项目中core包的同名文件——这是Python模块系统的固有特性。

解决方案

方法1:重构代码(推荐)

把__main__.py中的核心逻辑抽离到单独模块,彻底避免依赖__main__模块:

  • 在src/core下新建main.py,将原来__main__.py里的main()函数移到这个文件中
  • 修改原__main__.py内容为:
    from .main import main
    if __name__ == "__main__":
        main()
    
  • 测试文件中直接导入并测试:
    from core.main import main
    
    def test_main():
        # 编写测试逻辑
        result = main()
        assert result == expected_value
    

方法2:通过包名导入本地__main__模块

利用Python包的导入规则,直接通过core包引用它的__main__模块:

  • 确保项目根目录或src目录在Python的搜索路径中。可在项目根目录创建pytest.ini文件添加路径配置:
    [pytest]
    pythonpath = src
    
  • 测试文件中导入:
    from core import __main__ as core_main
    
    def test_main():
        core_main.main()
        # 添加断言逻辑
    

方法3:使用importlib动态导入

如果无法重构代码,可通过importlib手动加载本地__main__.py:

import importlib.util
from pathlib import Path

def test_main():
    # 定位到core包下的__main__.py文件
    main_file_path = Path(__file__).parent.parent / "__main__.py"
    # 创建模块规范
    spec = importlib.util.spec_from_file_location("core.__main__", main_file_path)
    core_main = importlib.util.module_from_spec(spec)
    # 执行模块加载
    spec.loader.exec_module(core_main)
    # 调用main函数并测试
    core_main.main()
    # 添加断言逻辑

内容的提问来源于stack exchange,提问作者mike rodent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:12:34