Pytest PropertyMock as return_value for MagicMock 没有被调用
Pytest PropertyMock as return_value for MagicMock does not get invoked
我正在尝试将 MagicMock
实例的 return_value
模拟为 PropertyMock
但它似乎 returning PropertyMock
对象没有调用它即不 return 实际值。
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
# ...
fields = (
"my_field"
)
my_field = serializers.SerializerMethodField()
def get_my_field(self, instance):
other_models = instance.other_models.filter(stuff="stuff")
if other_models:
# returns <class 'unittest.mock.PropertyMock'> instead of an actual value
print(type(other_models.get().my_property))
# throws error since it isn't receiving a string
return ujson.loads(other_models.get().my_property)
return {}
# test case
def test_hello(mocker):
expected_value = ujson.dumps({'hello': 2})
instance_mock = mocker.MagicMock()
other_model_mock = mocker.MagicMock()
other_model_mock.get().my_property = mocker.PropertyMock(return_value=expected_value)
instance_mock.other_models.filter.return_value = other_model_mock
serializer = MySerializer()
observed_value = serializer.get_my_field(instance_mock)
assert expected_value == observed_value
我不需要将 other_model_mock
设置为 MagicMock
只需将其设置为 PropertyMock
即可
expected_value = {'hello', 2}
instance_mock = mocker.MagicMock()
other_model_mock = mocker.PropertyMock()
other_model_mock.get().my_property.return_value = ujson.dumps(expected_value)
instance_mock.other_models.filter.return_value = other_model_mock
# ...
我正在尝试将 MagicMock
实例的 return_value
模拟为 PropertyMock
但它似乎 returning PropertyMock
对象没有调用它即不 return 实际值。
class MySerializer(serializers.ModelSerializer):
class Meta:
model = MyModel
# ...
fields = (
"my_field"
)
my_field = serializers.SerializerMethodField()
def get_my_field(self, instance):
other_models = instance.other_models.filter(stuff="stuff")
if other_models:
# returns <class 'unittest.mock.PropertyMock'> instead of an actual value
print(type(other_models.get().my_property))
# throws error since it isn't receiving a string
return ujson.loads(other_models.get().my_property)
return {}
# test case
def test_hello(mocker):
expected_value = ujson.dumps({'hello': 2})
instance_mock = mocker.MagicMock()
other_model_mock = mocker.MagicMock()
other_model_mock.get().my_property = mocker.PropertyMock(return_value=expected_value)
instance_mock.other_models.filter.return_value = other_model_mock
serializer = MySerializer()
observed_value = serializer.get_my_field(instance_mock)
assert expected_value == observed_value
我不需要将 other_model_mock
设置为 MagicMock
只需将其设置为 PropertyMock
即可
expected_value = {'hello', 2}
instance_mock = mocker.MagicMock()
other_model_mock = mocker.PropertyMock()
other_model_mock.get().my_property.return_value = ujson.dumps(expected_value)
instance_mock.other_models.filter.return_value = other_model_mock
# ...