Pytest просачивается через объекты между тестами - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь запустить два теста в pytest с двумя различными экземплярами класса attr (возвращаемого из фиксации в области функций) в качестве входных аргументов.Первый объект msg также обнаруживается во втором тесте.Мой пример:

import attr
import pytest
import uuid

@attr.s
class Receiver:
    internal_dict = attr.ib(default=dict())

    def send_message(self, msg):
        self.internal_dict[msg] = msg

@pytest.fixture
def msg():
    yield uuid.uuid1()

@pytest.fixture
def receiver():
    yield Receiver()

def test_send_msg_1(msg, receiver):
    receiver.send_message(msg)
    assert len(receiver.internal_dict) == 1

def test_send_msg_2(msg, receiver):
    receiver.send_message(msg)
    print("internal_dict:{}".format(receiver.internal_dict))
    assert len(receiver.internal_dict) == 1  # FAILS

Как происходит изменение состояния между двумя тестами?

1 Ответ

0 голосов
/ 25 сентября 2018

Этот код разделяет тот же экземпляр dict() в качестве изменяемого по умолчанию:

@attr.s
class Receiver:
    internal_dict = attr.ib(default=dict())

Вместо этого рассмотрите использование фабрики:

@attr.s
class Receiver:
    internal_dict = attr.ib(factory=dict)
...