使用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
相关产品推荐
相关产品推荐

