在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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |