Pytest Monkeypatch sa nevzťahujú Na Dovezené Funkcia

0

Otázka

Mám modul nastavený 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()

Podľa tejto odpovede som sa uistiť, monkeypatch skutočné dovezené stupňa funkciu. Všetky ostatné cesta vrhá "does not exist on module"chyby. Avšak, keď som spustiť test som narazila chybu, pretože pôvodná funkcia generate sa nazýva, napriek tomu, že to monkeypatched. Nemôžem prísť na to, prečo tento patch nebudete držať, tak ako som ju očakávať príliš. Ja by som očakávať, že tento test, ak chcete tlačiť "dobrý deň!".

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

Najlepšiu odpoveď

0

Vaše cesty sa zdá, že zápas. Robíte from bar import coo,, ale pomocou setattr s app.bar. Ak chcete mať istotu, môžete použiť inú formu setattr namiesto toho, ktorá trvá objektov a názvy atribútov osobitne, napr.:

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 spôsobom si môžete byť dostatočne istí, že ste sa opráv správny objekt.

2021-11-26 20:08:33

V iných jazykoch

Táto stránka je v iných jazykoch

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