Pytest, используя приборы как экземпляры класса в методе пролога setup_method - PullRequest
1 голос
/ 02 июля 2019

Я начал использовать инфраструктуру unitest, основанную на pytest, для добавления дополнительного класса тестирования (см. Ниже TestMyStuff)

Похоже, что если я добавлю приборы xi и yi в качестве входных данных метода setup_method, они будут ссылаться на них как на функции из fixtures.py, но добавляя их в каждую из тестовых функций, они получат свой возврат значение classX и classY соответственно, а не значение функции.

Оба метода тестирования имеют идентичный кодовый блок, для которого требуется xi и yi, а также дополнительный уникальный код для каждого теста. Я хочу взять общий код и добавить его к test_method, но для этого мне нужны xi и yi как экземпляры classX и classY, которые возвращает метод fixtures, а не сами методы из fixtures.py

Вкратце, есть ли способ разделить некоторые готовые приборы между всеми функциями класса (как методами тестирования, так и методом пролога)?

test_xy.py

from fixtures import *

class TestMyStuff
    def setup_method(self, test_method, xi, yi):
        # here xi and yi are functions :-(
        self.x = classX.makeX()
        self.y = classY.makeY()


    def test_X(self, xi, yi):
        # here xi and yi are instances of classX and classY
        # do shared stuff with xi and yi
        # do unique stuff with xi and yi

    def test_Y(self, xi,yi):
        # here xi and yi are instances of classX and classY
        # do shared stuff with xi and yi
        # do other stuff with xi and yi

fixtures.py

from classY import classY
from classX import classX


@pytest.fixture()
def xi(request):
    ...
    return classX(request.var1, request.var2, request.var3)
    #classX is implemented on different file called classX.py

@pytest.fixture()
def yi(request, xi)
    ...
    return classY(request.var1, xi) 

1 Ответ

0 голосов
/ 02 июля 2019

Из документации по pytest:

You can mix both fixture mechanisms in the same file but test methods of unittest.TestCase subclasses cannot receive fixture arguments.

https://docs.pytest.org/en/latest/xunit_setup.html

Я не думаю, что вы можете создавать вещи так элегантно, как хотелось бы.

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