Pytest Monkeypatch ไม่ปรับใช้ที่นำเข้ามาฟังก์ชัน

0

คำถาม

ฉันต้องเป็นศูนย์ควบคุม kde ในโมดูลตั้งค่าเวลาอย่างน้อยตาม:

# 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แต่ใช้ setattr กับ app.bar. ให้แน่ใจว่าคุณสามารถใช้อีกรูปแบบของ setattr แทนที่จะเป็นซึ่งใช้วัตถุที่และคนชื่อแอททริบิวต์ต่างหาก,e.g.:

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)

ทางนี้คุณสามารถเป็น reasonably แน่ใจว่าคุณเป็นเยียวยาที่ถูกต้องวัตถุ.

2021-11-26 20:08:33

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่