Pytest Monkeypatch não se Aplica À Função Importados

0

Pergunta

Eu tenho um conjunto de módulos até mais ou menos o seguinte:

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

Como por esta resposta que eu fiz certo monkeypatch o real importado instância da função. Qualquer outro caminho que lança um "does not exist on module"erro. No entanto, quando eu executar o teste, eu bati um erro, porque a função original generate está sendo chamado, apesar de ser monkeypatched. Eu não consigo descobrir por que esse patch não vai ficar do jeito que eu esperava também. Espero que este teste para imprimir "hello!".

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

Melhor resposta

0

Seus caminhos parecem não combinar. Você from bar import coomas usar setattr com app.bar. Para ter certeza, você pode usar a outra forma de setattr em vez disso, o que leva o objeto e os nomes de atributo separadamente, por exemplo:

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)

Desta forma, você pode ter certeza que você está usando o objeto correto.

2021-11-26 20:08:33

Em outros idiomas

Esta página está em outros idiomas

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