Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 未调用Pytest PropertyMock作为MagicMock的返回值_Python_Django_Django Rest Framework_Pytest_Pytest Django - Fatal编程技术网

Python 未调用Pytest PropertyMock作为MagicMock的返回值

Python 未调用Pytest PropertyMock作为MagicMock的返回值,python,django,django-rest-framework,pytest,pytest-django,Python,Django,Django Rest Framework,Pytest,Pytest Django,我试图将MagicMock实例的返回值模拟为PropertyMock,但它似乎在返回PropertyMock对象而不调用它,即不返回实际值 class MySerializer(serializers.ModelSerializer): class Meta: model = MyModel # ... fields = ( "my_field" ) my_field = serializ

我试图将MagicMock实例的返回值模拟为PropertyMock,但它似乎在返回PropertyMock对象而不调用它,即不返回实际值

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
我不需要将其他的模拟设置为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
# ...