У меня проблема с использованием данных, предоставленных 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 использует данные из простого входного текстового файла в виде:
QAEngineer, Mary, Mills, SENIOR
и создает из него param_list
следующим образом:
[['QAEngineer', ('Mary', 'Mills', 'SENIOR')]]
и возвращает как:
metafunc.parametrize("emplopyee_class, employee_parameters", tuple(params_list2))
так 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)
?