Фиктивная переменная класса с PropertyMock

#python #unit-testing #mocking #pytest

Вопрос:

Я хочу протестировать метод класса, который изменяет переменную класса с помощью pytest, поэтому я написал что-то подобное:

 class Test:
    var = 1

    @classmethod
    def foo(cls):
        cls.var = 2


def test_foo(mocker):
    mock = mocker.patch.object(Test, 'var', new_callable=mocker.PropertyMock)
    Test.foo()
    assert_that(Test.var, is_(2))
    mock.assert_called_once_with(2)
 

Моя проблема в том, что мок думает, что он никогда не вызывался, поэтому последнее утверждение не выполняется — есть ли способ заставить такое утверждение работать?

Редактировать:

Хорошо, я должен был быть более подробным — если var бы это было свойство, то мой код работал бы — так что, я думаю, я ищу что-то, что работает так PropertyMock же, как для переменных класса. Я знаю foo , что это называется, потому что я вызываю его из теста, потому что это метод, который я хочу протестировать. Вопрос в том, как проверить foo , выполнила ли она свою работу (т. Е. Присвоила ли ей какое-то значение var ) ?

Комментарии:

1. но он не вызывается, var никогда не вызывается, он установлен, единственное, что вызывается, — это метод foo . вам даже не нужно PropertyMock здесь, так как вы не используете @property декоратор для начала var