【问题标题】:Mocking a script with no `if __name__=="__main__":` block模拟没有 `if __name__=="__main__":` 块的脚本
【发布时间】:2022-01-15 18:26:02
【问题描述】:

假设我的根目录中有文件main.pycommon.py。这些代表我暂时不想接触的第三方模块。假设我还有一个 test.py 文件,我想用它来测试 main.py

common.py 包含以下内容:

def hello():
  print("hello")

main.py 包含以下内容:

from common import hello

hello()

有没有办法对test.py 中的hello 函数进行猴子补丁,以便导入main.py 将使用模拟函数?例如,我想给hello打补丁以打印出goodbye

【问题讨论】:

    标签: python mocking monkeypatching


    【解决方案1】:

    非常简单:

    import common
    
    common.hello = lambda: print("goodbye")
    
    import main
    

    【讨论】:

    • 请注意,这依赖于在调用 hello 之前知道 main.py 导入 common。一般来说,没有机会修补 import 语句和从文件内容创建的模块之间的任何内容。
    猜你喜欢
    • 2016-04-22
    • 2011-08-16
    • 1970-01-01
    • 2018-11-22
    相关资源
    最近更新 更多