Может ли Pytest создавать только один объект класса для проверки всех его методов? - PullRequest
0 голосов
/ 27 ноября 2018

Я думаю, что это должен быть очень распространенный сценарий, например, если у вас есть класс и несколько методов для него.Если вы хотите написать для них unittest, например test_method_1, test_method_2, ... test_method_n, я не хочу создавать экземпляр объекта класса для каждой из этих функций тестирования, он может быть избыточным или неэффективным.Тем не менее, я прочитал документ по Pytest, он выглядит мне, например, с помощью декорирования фикстуры, хотя кажется, что он создает экземпляр класса только один раз, фактически этот экземпляр вызывается каждый раз, когда он переходит к новой тестовой функции.Есть ли способ не сделать этого, но вместо этого я просто создаю объект класса только один раз, и все тесты выполняются внутри этого объекта?

1 Ответ

0 голосов
/ 27 ноября 2018

Приборы могут иметь разные области действия, или, другими словами, вызываться один раз для каждой функции, которая ее использует, или один раз для каждого тестового модуля, который ее использует, или один раз для каждой сессии тестирования, которая ее использует.См. https://docs.pytest.org/en/latest/fixture.html#scope-sharing-a-fixture-instance-across-tests-in-a-class-module-or-session

. Этот пример сценария завершится ошибкой, если вы используете область действия (функцию) по умолчанию, и пропустите, если вы используете другую область.

import pytest

SCOPE="function"
#SCOPE="session"

class Shared(object):

    counter = 0

    def __init__(self):
        self.instance_id = Shared.counter
        Shared.counter += 1


@pytest.fixture(scope=SCOPE)
def shared_instance():
    instance = Shared()

    yield instance


def test_one(shared_instance):
    assert shared_instance.instance_id == 0
def test_two(shared_instance):
    assert shared_instance.instance_id == 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...