我有一个名为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搜索结果都与模拟模型的特定方法有关。任何帮助将不胜感激。