加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在Django测试中,我应该如何保存数据库对象然后从数据库中检索它

发布时间:2020-12-20 12:08:50 所属栏目:Python 来源:网络整理
导读:我正在使用Django 1.8.我编写了以下代码来测试pre_save挂钩是否正常工作,但这段代码看起来非常不优雅.这是编写此类单元测试的“正确方法”吗? class PreSaveTests(TestCase): def test_pre_save_hook(self): person = Person(name="Joe") person.save() per
我正在使用Django 1.8.我编写了以下代码来测试pre_save挂钩是否正常工作,但这段代码看起来非常不优雅.这是编写此类单元测试的“正确方法”吗?

class PreSaveTests(TestCase):
    def test_pre_save_hook(self):
        person = Person(name="Joe")
        person.save()
        person2 = Person.objects.get(pk = person.pk)
        # Confirm that the pre_save hook ran.
        # The hook sets person.is_cool to True.
        self.assertEqual(person2.is_cool,True)

这很好用,但看起来很难看.

真正丑陋的部分是person和person2是同一个数据库对象.唯一的区别是person2是从数据库中检索出来的.

解决方法

你在考试中所做的一切都很好.但是,我认为你可以简化/改进它.

我认为你应该使用工厂(你可以使用FactoryBoy).这样,在模型上添加/删除必填字段时,您无需更新测试.此外,您可以从测试中删除不相关的信息.在这种情况下,人名是Joe的事实完全无关紧要.

你可以替换:

person = Person(name="Joe")
person.save()

有:

person = PersonFactory.create()

正如Daniel所说,您不需要重新加载Person实例.所以你不必这样做:

person2 = Person.objects.get(pk = person.pk)

最后,一个小提示,你可以使用assertTrue而不是assertEquals(某事,True):

class PreSaveTests(TestCase):

    def test_pre_save_hook(self):
        person = PersonFactory.create()
        self.assertTrue(person.is_cool)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读