#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