pytest-mock icon indicating copy to clipboard operation
pytest-mock copied to clipboard

spy on frozen dataclass

Open jennydaman opened this issue 3 years ago • 1 comments

Spy does not work on frozen dataclasses, it would be nice if it did (for instance, by using object.__setattr__(obj, name, spy)

from dataclasses import dataclass
from typing import Callable


def noop(*args, **kwargs):
    pass


@dataclass(frozen=True)
class MyFrozenClass:
    something: Callable = noop


def test_spy_frozen_dataclass(mocker: MockerFixture):
    o = MyFrozenClass()
    spy = mocker.spy(o, 'something')

Anyone also in this situation can use this workaround:

def test_spy_frozen_dataclass(mocker: MockerFixture):
    o = MyFrozenClass()
    spy = mocker.MagicMock(wraps=o.something)
    object.__setattr__(o, 'something', spy)

jennydaman avatar Feb 11 '22 05:02 jennydaman

Hi @jennydaman,

Thanks for the suggestion.

nicoddemus avatar Feb 11 '22 12:02 nicoddemus