Я пытаюсь написать тест для функции, которая вызывает метод класса объекта - этот метод класса возвращает новый экземпляр этого класса.
Здесь есть множество примеров исправления атрибутов класса в stackoverflow и в других местах, но мне трудно понять, как исправить атрибут / значение, чтобы я мог проверить свою функцию. Я сослался на этот ответ.
По сути, я пытаюсь исправить атрибут xxxx
экземпляра Foo (внутри myFn), чтобы я мог проверить / подтвердить последующее значение от его вызова до some_other_function()
. Приведенный ниже код является автономным и запускаемым для проблемы: я получаю AttributeError: Foo не имеет атрибута 'xxxx'
import time
import unittest
from unittest.mock import patch, PropertyMock
class Foo(object):
def __init__(self, xxxx):
"""long running task"""
time.sleep(5)
self.xxxx = xxxx
@classmethod
def get(cls):
"""also a long running task"""
time.sleep(5)
xxxx = 555
return cls(xxxx)
def myFn():
v = Foo.get().xxxx
# the patched `xxxx` should be 666 at this point
return some_other_function(v)
class Test(unittest.TestCase):
@patch('__main__.Foo', autospec=True)
def test_myFn(self, mock_Foo):
with patch('__main__.Foo.xxxx', new_callable=PropertyMock, return_value=666):
x = myFn()
self.assertEqual(x, 666)
if __name__ == '__main__':
unittest.main()
Очень благодарен за помощь!