Параметризация тестов с помощью pytest

Я узнаю о параметризованных тестах с Pyest. После ознакомления с соответствующей документацией по pytest, я пришел к этому простому примеру:

import unittest

import pytest


@pytest.fixture(autouse=True, params=['foo', 'bar'])
def foo(request):
    print('fixture')
    print(request.param)


class Foo(unittest.TestCase):
    def setUp(self):
        print('unittest setUp()')

    def test(self):
        print('test')

Это дает следующую ошибку:

Failed: The requested fixture has no parameter defined for the current test.
E               
E               Requested fixture 'foo' defined in:
E               tests/fixture.py:7

Строка 7 def foo(request):,

Что вызывает эту ошибку и как ее исправить?

1 ответ

Цель приборов - передать объекты в тестовые наборы, но созданный вами прибор не возвращает и ничего не дает.

Тогда я не уверен, что вы можете передавать объекты в метод TestCase unittest, я думаю, что это может создать некоторые конфликты с параметром self.

С другой стороны, он может работать с простой функцией:

@pytest.fixture(autouse=True, params=['foo', 'bar'])
def foo(request):
    print('fixture')
    print(request.param)
    yield request.param

# class Foo(unittest.TestCase):
#     def setUp(self):
#         print('unittest setUp()')
# 
#     def _test(self):
#         print('test')

def test_fixture(foo):
    assert foo == 'foo'

>>>  1 failed, 1 passed in 0.05 seconds
# test 1 run with foo : OK
# test 2 run with bar : FAILED

РЕДАКТИРОВАТЬ:

Действительно: Почему я не могу unittest.TestCases увидеть мои py.test приборы?

Другие вопросы по тегам