我编写了测试代码,然后运行该文件。 我写了这段代码
from django.test import TestCase
from app.models import User
# Create your tests here.
class UserModelTests(TestCase):
def test_is_empty(self):
saved_db = list(User.objects.values()[:2])
expected = [{'name': Tom,'user_id': 1,'nationarity': America, 'dormitory':'A', 'group': 3,'name': Bob,'user_id': 2,'nationarity': China, 'dormitory':'B', 'group': 4}]
self.assertEqual(expected, saved_db)
所以结果是
System check identified 60 issues (0 silenced).
F
======================================================================
FAIL: test_is_empty (app.tests.UserModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/app/tests.py", line 12, in test_is_empty
self.assertEqual(expected, saved_db)
AssertionError: Lists differ: [{'name': 1, 'fixed_constructi[4938 chars]: 0}] != []
First list contains 1 additional elements.
First extra element 0:
{'name': Tom,'user_id': 1,'nationarity': America, 'dormitory':'A', 'group': 3,'name': Bob,'user_id': 2,'nationarity': China, 'dormitory':'B', 'group': 4}
Diff is 5605 characters long. Set self.maxDiff to None to see it.
----------------------------------------------------------------------
Ran 1 test in 0.013s
FAILED (failures=1)
Destroying test database for alias 'default'...
我无法理解这段代码是否正常。当我多次打印出saved_db时,列表的顺序每次都会改变。所以我怀疑我可以比较预期的&列表。 saved_db correctory。没关系?我应该解决这个问题吗?
答案 0 :(得分:1)
您正在将两个dicts的列表与一个dict的列表进行比较。
expected = [
{'name': Tom
'user_id': 1
'nationarity': America,
'dormitory':'A',
'group': 3,
# Missing closure for dict: }, list sep and opener:
# }, {
'name': Bob,
'user_id': 2, ...
}
]
这就是缩进和长线斩波如此重要的原因。
在列表中修复字典之后,最好像这样执行测试代码并避免字典排序问题:
for index, item in enumerate(expected):
self.assertDictEqual(item, saved_db[index])
然而,假设模型中的排序顺序稳定。
djangonic的做法是:
class UserModelTests(TestCase):
def test_is_empty(self):
queryset = User.objects.order_by('user_id').values()[:2]
expected = [
{'name': 'Tom', 'user_id': 1, 'nationarity': 'America', 'dormitory': 'A', 'group': 3},
{'name': 'Bob', 'user_id': 2, 'nationarity': 'China', 'dormitory': 'B', 'group': 4}
]
for idx, item in enumerate(expected):
self.assertDictEqual(item, queryset[idx])
正如@rafaimp所指出的,如果你没有插入User
个对象的data migrations,那么你应该假设你的数据库是空的。添加数据的方法是使用fixtures或填充setUpTestData
方法。