【问题标题】:monkey patch not working properly猴子补丁无法正常工作
【发布时间】:2015-12-08 17:25:27
【问题描述】:

所以我正在运行 py.test 并尝试使用 monkeypatch。我了解monkeypatch 的预期目的是替换模块中的属性,以便可以对其进行测试。我知道我们可以用模拟函数代替来做到这一点。

目前我正在尝试运行以下代码块。

from src.module.submodule import *

def mock_function(parameter = None):
    return 0

def test_function_works(monkeypatch):
    monkeypatch.setattr("src.module.submodule.function",mock_function ]
   assert function(parameter = None) == 0

当测试运行时,它不会换入mock_function,而是运行function。猴子补丁没有激活是否有原因

我之前用其他代码成功运行了猴子补丁。所以我不明白为什么这不起作用。

【问题讨论】:

    标签: python unit-testing pytest monkeypatching


    【解决方案1】:

    我没有使用 pytest 来处理这些东西,但我知道使用 mock 库,函数会在调用它们的命名空间中进行修补。即from src.module.submodule import *src.module.submodule.function 导入到您的命名空间中,但是您随后在其原始命名空间中对其进行修补,因此您的函数的本地名称仍然可以访问原始的、未修补的代码。

    如果你把它改成

    import src.module.submodule
    
    def mock_function(parameter = None):
        return 0
    
    def test_function_works(monkeypatch):
        monkeypatch.setattr("src.module.submodule.function",mock_function ]
        assert src.module.submodule.function(parameter = None) == 0
    

    成功了吗?

    【讨论】:

      【解决方案2】:

      好像是错别字吧

       monkeypatch.setattr("src.module.submodule.function",mockIfunction)
      

      mockIfunction 而不是 mock_function?

      【讨论】:

      • 这些都是假文件名,所以请忽略拼写错误。我无法发布实际工作代码
      • 但大概mockIfunctionmock_function 应该匹配,否则你用什么来模拟你的函数?
      猜你喜欢
      • 2012-08-19
      • 2016-09-01
      • 2012-09-16
      • 2012-12-18
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多