Load/dump fixture from/to json django 单元测试中的字符串

Load/dump fixture from/to json string in django unittest

我在 django 中有一个自定义模型,其中覆盖了 to_python() 和 get_db_prep_save() 方法。我发现了一个错误:转储和重新加载数据时不一致。该错误已修复,但我想用简单的 json 字符串对其进行单元测试。

我的问题是:如何在 unittest 中调用 loaddata / dumpdata。

我想创建以下场景:

from django.test import TestCase
class CustomModelTest(TestCase):
    def test_load_fixture(self):
        mydata = '[{"model": "some_app.custommodel", "pk": 1, "fields": {"custom_field": "some correct value"}}]'
        django.<b>some_interface_to_load_fixture</b>.loaddata(mydata) // data could be as json string, file, stream
        make some assertions on database model custommodel

    def test_dump_fixture(self):
        mymodel = create model object with some data
        result = django.<b>some_interface_to_dump_fixture</b>.dumpdata()
        make some assertions on result

我知道有一个 fixture=[] 字段可以在 django 单元测试中使用,它可以解决加载夹具的情况。但是,如果有人可以指出一些接口来按需加载或转储夹具数据,那就太好了。

感谢@YugandharChaudhari 我想出了使用 django.core.serializers:

的解决方案
import json
from django.core import serializers
from django.test import TestCase
from some_app.models import CustomModel

class CustomModelTest(TestCase):
    def test_deserializing(self):
        test_data = [
            {"model": "some_app.custommodel",
             "pk": 1,
             "fields":
                 {
                     "custom_field": "some correct value"}
             }
        ]
        result = list(serializers.deserialize('json', json.dumps(test_data)))
        self.assertEqual(result[0].object.custom_field, 'some data after deserialization')

    def test_serializing(self):
        custom_model_obj = CustomModel(id=1, custom_field='some data')
        result_json = json.loads(serializers.serialize('json', [custom_model_obj]))
        self.assertEqual('some data after serialization', result_json[0]['fields']['custom_field'])