You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pytest测试Employee类时遇fixture 'bruce'未找到问题求助

解决pytest提示"fixture 'bruce' not found"的问题

问题根源

你的测试函数参数用了bruce,但定义的fixture名字是initial_info——pytest会根据测试函数的参数名匹配对应的fixture,因此找不到名为bruce的fixture才抛出错误。

修复方案

有两种简单的修复方式:

方式一:修改fixture名称为bruce

直接将fixture函数名改为bruce,让测试函数的参数名与fixture名对应:

import pytest
from employee import Employee


@pytest.fixture
def bruce():
    """Create an instance of Employee"""
    bruce = Employee('Hongbo', 'Wei', 40000)
    return bruce


def test_give_default_raise(bruce):
    """Test if raising correctly salary by default"""
    bruce.give_raise()
    assert bruce.annual_salary == 45000


def test_give_custom_raise(bruce):
    """Test if raising salary correctly by providing parameter"""
    raise_amount = 6666
    bruce.give_raise(raise_amount)
    assert bruce.annual_salary == 46666

方式二:修改测试函数参数名为initial_info

保持fixture名称不变,将测试函数的参数改为initial_info,并调整函数内的调用逻辑:

import pytest
from employee import Employee


@pytest.fixture
def initial_info():
    """Create an instance of Employee"""
    bruce = Employee('Hongbo', 'Wei', 40000)
    return bruce


def test_give_default_raise(initial_info):
    """Test if raising correctly salary by default"""
    initial_info.give_raise()
    assert initial_info.annual_salary == 45000


def test_give_custom_raise(initial_info):
    """Test if raising salary correctly by providing parameter"""
    raise_amount = 6666
    initial_info.give_raise(raise_amount)
    assert initial_info.annual_salary == 46666

额外优化建议

你的Employee类中give_raise方法的默认参数是空字符串,若传入非字符串类型的空值(比如None)可能引发异常,建议将默认参数改为None,逻辑更严谨:

def give_raise(self, raise_amount=None):
    if raise_amount is not None:
        self.annual_salary += int(raise_amount)
    else:
        self.annual_salary += 5000

内容的提问来源于stack exchange,提问作者Hongbo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:37:12