Чтобы имитировать свойство, доступное только для чтения, в Python с помощью библиотеки mock, вы можете использовать разные методы. Вот несколько методов с примерами кода:
Метод 1: исправление свойства с помощью объекта MagicMock
from unittest import TestCase
from unittest.mock import patch
class MyClass:
@property
def read_only_property(self):
return 42
class MyTestClass(TestCase):
def test_mock_read_only_property(self):
with patch('__main__.MyClass.read_only_property', new_callable=PropertyMock) as mock_property:
mock_property.return_value = 84
instance = MyClass()
result = instance.read_only_property
self.assertEqual(result, 84)
Метод 2: создание фиктивного объекта и установка значения свойства
from unittest import TestCase
from unittest.mock import MagicMock
class MyClass:
@property
def read_only_property(self):
return 42
class MyTestClass(TestCase):
def test_mock_read_only_property(self):
instance = MyClass()
instance.read_only_property = MagicMock(return_value=84)
result = instance.read_only_property()
self.assertEqual(result, 84)
Метод 3: создание подкласса исходного класса и переопределение свойства
from unittest import TestCase
from unittest.mock import patch
class MyClass:
@property
def read_only_property(self):
return 42
class MyTestClass(TestCase):
def test_mock_read_only_property(self):
class MockClass(MyClass):
@property
def read_only_property(self):
return 84
instance = MockClass()
result = instance.read_only_property
self.assertEqual(result, 84)