gpt4 book ai didi

django - 是否有模拟 Django 模型的标准方法?

转载 作者:行者123 更新时间:2023-12-02 09:54:50 25 4
gpt4 key购买 nike

我有一个名为 Pdb 的模型:

class Pdb(models.Model):

id = models.TextField(primary_key=True)
title = models.TextField()

与模型是一对多关系Residue:

class Residue(models.Model):

id = models.TextField(primary_key=True)
name = models.TextField()
pdb = models.ForeignKey(Pdb)

单元测试Pdb很好:

def test_can_create_pdb(self):
pdb = Pdb(pk="1XXY", title="The PDB Title")
pdb.save()
self.assertEqual(Pdb.objects.all().count(), 1)
retrieved_pdb = Pdb.objects.first()
self.assertEqual(retrieved_pdb, pdb)

当我进行单元测试Residue时,我只想使用模拟 Pdb 对象:

def test_can_create_residue(self):
pdb = Mock(Pdb)
residue = Residue(pk="1RRRA1", name="VAL", pdb=mock_pdb)
residue.save()

但这会失败,因为它需要一些名为 _state 的属性:

AttributeError: Mock object has no attribute '_state'

所以我不断添加模拟属性,使其看起来像一个真实的模型,但最终我得到:

django.db.utils.ConnectionDoesNotExist: The connection db doesn't exist

我不知道如何模拟对数据库的实际调用。有没有标准的方法来做到这一点?我真的不想在测试数据库中实际创建 Pdb 记录,因为这样测试就不会被隔离。

是否有既定的最佳实践方法来做到这一点?

我得到的大部分 SF 和 google 结果都与模拟模型的特定方法有关。任何帮助将不胜感激。

最佳答案

这里并不是严格的单元测试,因为您涉及数据库,我将其称为集成测试,但这是另一个非常激烈的争论!

我的建议是让你的包装测试类继承自 django.test.TestCase。如果您担心每个单独的测试用例完全隔离,那么您可以创建多个类,每个类都有一个测试方法。

如果这些测试需要编写,也可能值得重新考虑,因为它们似乎只是验证框架是否正常工作。

关于django - 是否有模拟 Django 模型的标准方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46834287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com