Тесты с тестовыми приборами в качестве методов класса (PyTest) - PullRequest
0 голосов
/ 31 октября 2019

При организации тестов в PyTest я видел, что методы тестирования могут быть определены в классе теста, например:

class TestBasicEquality:
    def test_a_equals_b(self):
        assert 'a' == 'b'

Если мы хотим написать тест (test_client)который должен использовать прибор PyTest client, мы делаем что-то вроде этого:

def test_client(client):
    # assert client.something == something

Но как мы можем организовать test_client в тестовом классе? Я попытался использовать @pytest.mark.usefixtures(client) в качестве декоратора для тестового класса, но безуспешно.

Может кто-нибудь показать, как и / или указать руководство / документацию для меня, чтобы понять?

И, возможно, вопрос, скрытый за всем этим : когда мы должны (или не должны) ставить тесты для тестирования в классе? (только сейчас начинаешь изучать PyTest ..)?

1 Ответ

0 голосов
/ 31 октября 2019

В вашем конкретном случае вы просто включили бы осветитель в качестве другого аргумента метода:

class TestSomething:
    def test_client(self, client):
        assert client.something == "something"

Так для чего нужны классы? Лично мне редко приходится использовать их с pytest, но вы можете, например, использовать их для:

  1. Создание групп тестов в одном файле и возможность запуска только одной группы: pytest ./tests/test.py::TestSomething
  2. Выполните прибор для каждого метода тестирования, в то время как методы не обязательно должны обращаться к самому устройству. Пример из документации - это автоматическая очистка перед каждым методом. Это @pytest.mark.usefixtures(), который вы обнаружили.
  3. Имейте прибор, который автоматически запускается один раз для каждого тестового класса, определяя область видимости от до class: @pytest.fixture(scope="class", autouse=True)
...