Параметризованный прибор внутри класса unittest.TestCase - PullRequest
1 голос
/ 01 августа 2020

Я использую pytest и хочу использовать параметризованный прибор pytest. Если я не использую класс и не запускаю pytest, оба теста проходят успешно, но внутри тестового класса оба теста терпят неудачу, но я не могу понять, что не так.

Рабочий код:

import pytest

@pytest.fixture
def db_fixture():
    def insert_records(data):
        return data
    db = insert_records
    yield db
    db = {}  # reset fixture


def test_create_record_one(db_fixture):
    result = db_fixture({"id": 1})
    assert result == {"id": 1}


def test_create_record_two(db_fixture):
    result = db_fixture({"id": 2})
    assert result == {"id": 2}

Код, который не работает:

import pytest
import unittest

class TestSample(unittest.TestCase):

    @staticmethod
    @pytest.fixture
    def db_fixture():
        def insert_records(data):
            return data
        db = insert_records
        yield db
        db = {}  # reset fixture

    @staticmethod
    def test_create_record_one(db_fixture):
        result = db_fixture({"id": 1})
        assert result == {"id": 1}

    @staticmethod
    def test_create_record_two(db_fixture):
        result = db_fixture({"id": 2})
        assert result == {"id": 2}

Ошибка:

TypeError: test_create_record_one() missing 1 required positional argument: 'db_fixture'

1 Ответ

1 голос
/ 01 августа 2020

Вы не можете смешивать unittest.TestCase с приборами pytest. Хотя pytest знает о unittest и может выполнять допустимые модульные тесты на основе unittest.TestCase, обратное неверно.

В вашем случае просто не производите от unittest.TestCase:

class TestSample:

    @staticmethod
    @pytest.fixture
    def db_fixture():
        def insert_records(data):
            return data
        db = insert_records
        yield db
        db = {}  # reset fixture

    @staticmethod
    def test_create_record_one(db_fixture):
        result = db_fixture({"id": 1})
        assert result == {"id": 1}
    ...
...