Pytest导入模块时执行main() 无法仅测试指定函数问题排查
问题原因
Python 导入模块时会执行模块顶层的所有可执行代码,你在milage_converter.py文件末尾直接写了main()调用,这行属于顶层代码:
- 当测试文件执行
from py_exercises.src import milage_converter这行导入语句时,还没进入测试函数、你的monkeypatch输入模拟还没生效,就已经触发了main()函数执行 main()内部调用了input()读取标准输入,而pytest默认会捕获程序的输入输出,此时直接读stdin就会抛出你遇到的报错
解决方法
把milage_converter.py末尾的main()调用改成Python标准的脚本入口判断写法即可:
if __name__ == "__main__": main()
这个写法的逻辑是:
- 当你直接运行
python3.9 milage_converter.py使用脚本功能时,内置变量__name__的值为__main__,会正常执行main()函数,原有功能不受任何影响 - 当文件被测试代码或者其他模块导入时,
__name__的值为模块名milage_converter,条件不满足,不会执行main(),也就不会在导入阶段触发输入逻辑
内容的提问来源于stack exchange,提问作者Dobhaweim
相关产品推荐
相关产品推荐

