Патч для module.object с python - PullRequest
0 голосов
/ 13 марта 2020

Здравствуйте. Я пробую следующий тестовый сценарий

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

Реализация MainObject

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, он действительно работает, есть ли способ заставить его работать с моей первоначальной реализацией?

Спасибо!

1 Ответ

4 голосов
/ 13 марта 2020

Привет, это все о том, где и что патчить. В вашем примере вы издеваетесь над классом MockMe в модуле mockme. Вам нужно смоделировать класс, который импортируется в ваш модуль main.py. Взгляните на , где патчить в Python документах.

Надеюсь, это поможет!

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"
...