Pytest Monkeypatch se nevztahuje Na Importované Funkce

0

Otázka

Mám modul nastavit zhruba takto:

# foo.py
def generate_things_based_on_other_things():
  # some nasty things here

# bar.py
from foo import generate_things_based_on_other_things as generate

def coo():
  generate()

# conftest.py
import pytest

@pytest.fixture(autouse=True)
def patch_generate(monkeypatch):
  def mock_generate():
    print("hello!")

  monkeypatch.setattr("app.bar.generate", mock_generate)

# test_bar.py
from bar import coo

def test_coo():
  coo()

Jak na tuto odpověď udělal jsem určitě monkeypatch skutečné dovezené instanci funkce. Jinou cestu hodí "does not exist on module"chyba. Nicméně, když jsem spustit test jsem narazila chybu, protože původní funkce generate je volána, i přes to, že monkeypatched. Nemůžu přijít na to, proč tento patch nebude držet tak, jak očekávám, že to taky. Já bych očekávat, že tento test print "ahoj!".

monkeypatching pytest python
2021-11-23 15:16:56
1

Nejlepší odpověď

0

Vaše cesty se nezdá, aby odpovídala. Vy from bar import coo, ale použít setattr s app.bar. Být jisti, můžete použít jiné formy setattr místo, které vyžaduje objekt a atribut názvy samostatně, např.:

import bar  # or "from app import bar", whichever is correct for you

@pytest.fixture(autouse=True)
def patch_generate(monkeypatch):
    def mock_generate():
        print("hello!")

    monkeypatch.setattr(bar, "generate", mock_generate)

Tímto způsobem si můžete být rozumně jisti, že jste záplatování správný objekt.

2021-11-26 20:08:33

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................