Pytest: использовать параметризацию вывода прибора как имя экземпляра класса в тесте - PullRequest
0 голосов
/ 21 ноября 2018

У меня проблема с использованием данных, предоставленных 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)

?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...