Meilleure façon de simuler l'attribut de classe dans le test unitaire python

J'ai une classe de base qui définit un attribut de classe et certaines classes enfant qui en dépendent, par exemple,

class Base(object):
    assignment = dict(a=1, b=2, c=3)

Je veux unittest cette classe avec différents affectationspar exemple, un dictionnaire vide, seul élément, etc. C'est simplifiée à l'extrême, bien sûr, ce n'est pas une question de refactoring mes classes ou des tests

L' (pytest) tests je suis venu avec, éventuellement, que les travaux sont

from .base import Base

def test_empty(self):
    with mock.patch("base.Base.assignment") as a:
        a.__get__ = mock.Mock(return_value={})
        assert len(Base().assignment.values()) == 0

def test_single(self):
    with mock.patch("base.Base.assignment") as a:
        a.__get__ = mock.Mock(return_value={'a':1})
        assert len(Base().assignment.values()) == 1

C'est plutôt compliqué et hacky - je n'ai même pas bien comprendre pourquoi ça marche (je suis familier avec les descripteurs). N'maquette magiquement transformer les attributs de classe dans les descripteurs?

Une solution qui permettrait de se sentir plus logique ne fonctionne pas:

def test_single(self):
    with mock.patch("base.Base") as a:
        a.assignment = mock.PropertyMock(return_value={'a':1})
        assert len(Base().assignment.values()) == 1

ou tout simplement

def test_single(self):
    with mock.patch("base.Base") as a:
        a.assignment = {'a':1}
        assert len(Base().assignment.values()) == 1

D'autres variantes que j'ai essayé ne fonctionnent pas non plus (affectations reste inchangé dans le test).

Quelle est la bonne façon de se moquer d'un attribut de classe? Est-il mieux /plus compréhensible que celui ci-dessus?

source d'informationauteur Ivo van der Wijk