Я использую параметризационные тесты, чтобы протестировать 2 разных набора данных.Например, вот так.some_data()
функции возвращают тестовые данные.
test_data = [
(some_data1_v1(), some_data2_v2()),
(some_data1_v2(), some_data2_v2())
]
@pytest.mark.parametrize('a,b', test_data)
def test_fn(a,b):
pass
Но для некоторых тестов, которые проверяют только общее поведение, мне не нужно тестировать 2 набора данных, потому что оба набора имеют соответствующие общие данные.Я хочу преобразовать функцию some_data1_v1()
в прибор и использовать ее в тесте, например:
def test_fn2(some_data1_v1):
pass
Если я это сделаю, то вызову some_data1_v1()
во время test_data
исключения при создании списка Fixtures are not meant to be called directly...
Так что вместо этого
def test_fn2(some_data1_v1):
pass
мне это нравится
@pytest.mark.parametrize('some_data1_v1', [some_data1_v1()])
def test_fn2(some_data1_v1):
pass
Это позволяет мне иметь один источник тестовых данных - «поддельные приборы» (обычные функции, которые возвращаютdata) и передать тестовые данные в список test_data
(первый пример или последний пример).Но я думаю, что мой подход к хранению данных в обычных функциях - это прерывание "абстракция фикстур".
Есть ли лучший подход, чтобы делать то, что я делаю?