【发布时间】:2017-10-24 08:24:44
【问题描述】:
我正在为django-model 编写一些简单的测试,而我只是使用assertEqual 和assertNotEqual。
现在我还没有完全掌握在这种情况下如何测试BooleanField。我有一个像这样的model 字段:
duplicate = models.BooleanField(default=False)
我正在为它写这个测试,只是为了检查它是否相等:
def test_feed_duplicate_create(self):
stefan_feed_duplicate = Feed.objects.get(duplicate='False')
milan_feed_duplicate = Feed.objects.get(duplicate='False')
self.assertEqual(
stefan_feed_duplicate.duplicate, 'False'
)
self.assertEqual(
milan_feed_duplicate.duplicate, 'False'
)
但我面临的错误是:
(venv) vagrant@jessie:/var/www/vhosts/bspotted.net/app$ ./manage.py test --keepdb socialmedia
nosetests socialmedia --verbosity=1
Using existing test database for alias 'default'...
............E....................
======================================================================
ERROR: test_feed_duplicate_create (app.socialmedia.tests.test_feed_model.CommentsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/var/www/vhosts/bspotted.net/app/socialmedia/tests/test_feed_model.py", line 225, in test_feed_duplicate_create
stefan_feed_duplicate = Feed.objects.get(duplicate='False')
File "/var/www/vhosts/bspotted.net/venv/lib/python3.4/site-packages/django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/var/www/vhosts/bspotted.net/venv/lib/python3.4/site-packages/django/db/models/query.py", line 338, in get
(self.model._meta.object_name, num)
socialmedia.models.feed.MultipleObjectsReturned: get() returned more than one Feed -- it returned 2!
----------------------------------------------------------------------
Ran 33 tests in 0.159s
有人能解释一下在这种情况下测试BooleanField 的正确方法是什么吗?谢谢。
【问题讨论】:
-
删除布尔值周围的括号,不要使用
get,如果从数据库返回多个对象,get将抛出异常。改用过滤器,它将返回查询集对象Feed.objects.filter(duplicate=False),但如果您只想要该对象,那么您可以从查询集结果Feed.objects.filter(duplicate=False).first()中获取第一个对象,然后在您的断言语句中只使用用户self.assertFalse(stefan_feed_duplicate.duplicate) -
好的,这很好,我知道了,现在,谢谢你向我解释这个
-
除了
id之外,你的模式中还有什么唯一的字段吗?如果是,使用它们,如果没有,使用id,检索单个对象。 -
其实我很感谢你的提示。