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

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

概述我正在使用Django 1.8.我编写了以下代码来测试pre_save挂钩是否正常工作,但这段代码看起来非常不优雅.这是编写此类单元测试的“正确方法”吗? class PreSaveTests(TestCase): def test_pre_save_hook(self): person = Person(name="Joe") person.save() 我正在使用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)
总结

以上是内存溢出为你收集整理的在Django测试中,我应该如何保存数据库对象然后从数据库中检索它?全部内容,希望文章能够帮你解决在Django测试中,我应该如何保存数据库对象然后从数据库中检索它?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1194205.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存