Pytest Monkeypatch nu Se Aplică La Importate Funcție

0

Problema

Am un modul stabilit la aproximativ după cum urmează:

# 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()

Ca pe acest răspuns m-am asigurat că monkeypatch efectiv importate exemplu de funcție. Orice altă cale aruncă o "does not exist on module"eroare. Cu toate acestea, atunci când am rula testul l-am lovit o eroare, pentru că funcția originală generate este numit, în ciuda faptului că monkeypatched. Nu-mi dau seama de ce acest patch nu se va lipi asa cum cred eu de asemenea. M-aș aștepta la acest test pentru a imprima "buna ziua!".

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

Cel mai bun răspuns

0

Căile tale nu par să se potrivească. Faci from bar import coodar utilizarea setattr cu app.bar. Pentru a fi sigur, puteți folosi o altă formă de setattr în schimb, care are obiect și nume de atribute separat, de exemplu:

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)

În acest fel puteți fi destul de sigur că ești colare obiectul corect.

2021-11-26 20:08:33

În alte limbi

Această pagină este în alte limbi

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