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'])
我在 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
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'])