patch('some_package.some_other_method')
заменит функцию some_other_method
на Mock
. Теперь вам нужно заменить возвращаемое значение метода some_obj_some_method
этого макета:
mock.return_value.some_obj_some_method.return_value = False
Полный пример:
# some_package.py
class SomeObject:
def some_obj_some_method(self):
raise RuntimeError()
def some_other_method():
return SomeObject()
def some_method():
some_obj = some_other_method()
# This is what you want to mock return value of:
return some_obj.some_obj_some_method()
Тест:
from unittest.mock import patch
from some_package import SomeObject, some_method
@patch('some_package.some_other_method')
def test_some_stuff(function_mock):
function_mock.return_value.some_obj_some_method.return_value = False
assert not some_method()
Тест пройдет как есть, поднимет RuntimeError
без исправлений и провалит утверждение без строки function_mock.return_value.some_obj_some_method.return_value = False
, поскольку some_method
вернет только Mock
, который никогда не будет False
.