Как можно использовать pytest monkeypatch для исправления класса - PullRequest
0 голосов
/ 07 апреля 2020

Я хотел бы использовать [pytest monkeypatch] [1] для макета класса, который импортируется в отдельный модуль. Возможно ли это на самом деле, и если да, то как это сделать? Похоже, я не видел пример для этой конкретной ситуации. Предположим, что у вас есть приложение с импортированным классом A в нечто .py

from something import A #Class is imported

class B :
  def __init__(self) :
   self.instance = A() #class instance is created

  def f(self, value) :
    return self.instance.g(value)

внутри моего test.py. Я хочу смоделировать A внутри B

from something import B

#this is where I would mock A such that
def mock_A :
  def g(self, value) :
    return 2*value

#Then I would call B
c = B()
print(c.g(2)) #would be 4

I see how monkeypatch can be used to patch instances of classes, but how is it done for classes that have not yet been instantiated?  Is it possible?  Thanks!

  [1]: https://docs.pytest.org/en/latest/monkeypatch.html

1 Ответ

0 голосов
/ 07 апреля 2020

проверял это, у меня работает:

def test_thing(monkeypatch):
    def patched_g(self, value):
        return value * 2

    monkeypatch.setattr(A, 'g', patched_g)
    b = B()
    assert b.f(2) == 4
...