使用pytest_generate_tests
提供的数据时遇到问题。关键是数据是作为字符串值的元组提供的,而且在测试中,我需要将其中之一用作被测试类的名称,并且我找不到解决方案如何使用此str值作为其名称来初始化类
这是一个简单的测试类:
class Grade(Enum):
TRAINEE = 1
JUNIOR = 2
MIDDLE = 5
SENIOR = 10
class Employee(metaclass=ABCMeta):
def __init__(self, name, surname, grade: Grade):
self.name = name
self.surname = surname
base = 300
self.salary = int(base * grade.value)
class QAEngineer(Employee):
def __init__(self, name, surname, salary):
super().__init__(name, surname, salary)
和一个简单的测试,以检查实例是否正确初始化。
为此,编写了使用pytest_generate_tests
方法的测试治具。 Fixture使用来自简单输入txt文件的数据,格式为:
QAEngineer, Mary, Mills, SENIOR
并通过以下方式从其中创建param_list
:
[['QAEngineer', ('Mary', 'Mills', 'SENIOR')]]
并返回为:
metafunc.parametrize("emplopyee_class, employee_parameters", tuple(params_list2))
so employee_class = QAEngineer,employee_parameters =('Mary','Mills','SENIOR')
然后我需要在测试中提供emplopyee_class, employee_parameters
值,这里的问题是-由于emplopyee_class
是str,因此在创建要测试的QAEngineer实例时不能将其用作类名。我需要对其进行硬编码,即:
def test_emp_append_file(emplopyee_class, employee_parameters):
grade = Grade.__getattr__(employee_parameters[2])
employee = QAEngineer(employee_parameters[0], employee_parameters[1], grade)
assert employee.name == employee_parameters[0]
assert employee.surname == employee_parameters[1]
如何更改emplopyee_class
的类型以及将其用作类名的类型,因此改成这样的形式:
employee = emplopyee_class(employee_parameters[0], employee_parameters[1], grade)
?