Pytest Monkeypatch no se Aplica A las importaciones de Función

0

Pregunta

Tengo un conjunto de módulos hasta más o menos la siguiente:

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

Según esta respuesta me aseguré de monkeypatch el importado real instancia de la función. Cualquier otro camino que arroja un "does not exist on module"error. Sin embargo, cuando ejecuto el test me golpeó un error, porque la función original generate se llama, a pesar de ser monkeypatched. No puedo entender por qué este parche no se pegue la forma en que me esperas demasiado. Yo esperaría que esta prueba para imprimir "hola!".

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

Mejor respuesta

0

Sus caminos no parecen coincidir. Usted from bar import coopero el uso de setattr con app.bar. Para estar seguro, usted puede usar la otra forma de setattr en su lugar, que toma el objeto y los nombres de atributo por separado, por ejemplo:

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)

De esta manera usted puede estar razonablemente seguro de que la aplica el objeto correcto.

2021-11-26 20:08:33

En otros idiomas

Esta página está en otros idiomas

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