用python修补module.object

2024-09-29 21:28:45 发布

您现在位置:Python中文网/ 问答频道 /正文

您好,我正在尝试以下测试场景

def test_main(monkeypatch):
  with patch("library.mockme.MockMe") as mock:
    message = MainObejct().message()
    assert message == "Mock me"

主对象实现

from library.mockme import MockMe

class MainObejct():
  def __init__(self):
    self.mock_me = MockMe()

  def message(self):
    return self.mock_me.message

这里的问题是,MockMe对象没有修补。。。但是,如果我将导入更改为from library import mockme.MockMe,它实际上可以工作,有没有办法让它与我的原始实现一起工作

谢谢


Tags: 对象fromtestimportselfmessagemaindef
1条回答
网友
1楼 · 发布于 2024-09-29 21:28:45

嗨,这是所有关于哪里和什么补丁。在您的示例中,您正在模拟mockme模块中的MockMe类。您需要模拟导入到main.py模块中的类。看看Python文档中的where to patch

希望这有帮助

test_main.py

from main import MainObejct


def test_main(mocker):
    m_mockerme = mocker.patch("main.MockMe")
    m_mockerme.return_value.hello.return_value = "goodbye"
    message = MainObejct().message()
    assert message == "goodbye"

main.py

from library.mockme import MockMe


class MainObejct:
    def __init__(self):
        self.mock_me = MockMe()

    def message(self):
        return self.mock_me.hello()

library/mockme.py

class MockMe:
    def hello(self):
        return "hello"

相关问题 更多 >

    热门问题