pytest AttributeError:在 Python 3 中引用夹具时“函数对象没有属性”

Ank*_*edi 5 python pytest python-3.x

我有一个模型和一个控制器,我正在尝试测试:

class Model:

    def __init__(self):
        self.display = ""

    def set_display(self, display):
        self.display = display

import pytest
from model import Model
from controller import Controller

@pytest.fixture
def model():
    return Model()

@pytest.fixture
def controller(model):
    return Controller(model)

def test_clear_button(controller):
    controller.button_pressed("4")
    controller.button_pressed("2")
    controller.button_pressed("C")
    assert model.display == "0"
Run Code Online (Sandbox Code Playgroud)

E AttributeError: 'function' 对象没有属性 'display'

以上是我每次运行测试时遇到的错误/失败。

class Controller:

    def __init__(self, model):
        self.model = model

    def button_pressed(self, button_label):
        pass
Run Code Online (Sandbox Code Playgroud)

Woo*_*193 5

根据pytest,通过执行以下操作:

@pytest.fixture
def model():
    return Model()
Run Code Online (Sandbox Code Playgroud)

进而:

@pytest.fixture
def controller(model):
    return Controller(model)
Run Code Online (Sandbox Code Playgroud)

您定义一个名为的固定装置,controller该固定装置引用另一个称为model定义model该类实例的固定装置Controller。因此,您似乎没有model正确引用:

def test_clear_button(controller):
    controller.button_pressed("4")
    controller.button_pressed("2")
    controller.button_pressed("C")
    assert controller.model.display == "0"
Run Code Online (Sandbox Code Playgroud)

或者,或者:

def test_clear_button(controller, model):
    controller.button_pressed("4")
    controller.button_pressed("2")
    controller.button_pressed("C")
    assert model.display == "0"
Run Code Online (Sandbox Code Playgroud)