我正在尝试用Django/unittest学习单元测试。
以下是我的模型的简单版本:
class Device(models.Model):
name = models.CharField(max_length=100)
def get_ips(self):
return DeviceIP.objects.filter(device=self.id)
class DeviceIP(models.Model):
ip = models.GenericIPAddressField()
device = models.ForeignKey(Device)
这是我想出的测试代码:
from django.test import TestCase
class DeviceTest(TestCase):
def test_get_ips(self):
device = Device()
device.name = 'My Device'
ip1 = DeviceIP()
ip1.ip = '127.0.0.1'
ip1.device = device
ip1.save()
ip2 = DeviceIP()
ip2.ip = '127.0.0.2'
ip2.device = device
ip2.save()
ip3 = DeviceIP()
ip3.ip = '127.0.0.3'
ip3.device = device
ip3.save()
self.assertEqual(device.get_ips(), [ip1, ip2, ip3])
测试结果失败,因为在AssertionError
上,即使device.get_ips()
和[ip1, ip2, ip3]
的字符串表示形式相同。
如果我尝试使用self.assertListEqual
,就会得到一个错误,因为device.get_ips()
是一个查询集,而不是一个列表。
如果我尝试self.assertQuerySetEqual
,我会得到一个错误,说“DeviceTest object has no attribute assertQuerySetEqual
”,但我不确定为什么,因为DeviceTest
扩展了django.test
的测试用例。
我应该怎么做这样的测试?
另外,在一个“真实”的项目中,做这样一个简单的测试有意义吗?
目前没有回答
相关问题 更多 >
编程相关推荐