Pytest Monkeypatch不适用于进口的功能

0

的问题

我有一个模块设置了大致如下:

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

这个答案 我一定要monkeypatch实际进口的实例的功能。 任何其他的道路引发 "does not exist on module"错误。 然而,当我运行测试我打了一个错误,因为原来的功能 generate 被称,尽管它是monkeypatched. 我不能弄清楚为什么这片不会坚持我的期望。 我希望这个试验,以打印的"你好!"。

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

最好的答案

0

你的路径似乎不相匹配。 你做的 from bar import coo但使用 setattrapp.bar. 可以肯定,你可以使用其他形式的 setattr 相反,这需要对象和属性的名称分别,例如:

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)

这种方式可以合理地肯定,你是修补了正确的对象。

2021-11-26 20:08:33

其他语言

此页面有其他语言版本

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