如何在Django模型中测试订购,唯一和 unique_together ?
答案 0 :(得分:2)
订购 - 创建几个实例,然后检查订单是否正确。例如:
self.assertEqual(list[0], a)
self.assertEqual(list[1], b)
etc
唯一 - 创建一个实例,尝试使用相同的唯一字段创建另一个实例。断言有一个例外:
with self.assertRaises(IntegrityError):
MyModel.objects.create(unique_field=the_same_value)
Unique Together 与唯一相同。
希望它有所帮助!
答案 1 :(得分:2)
如MDN Django教程第10部分所述,“您应该测试自己代码的所有方面,但不要作为Python或Django的一部分提供的任何库或功能。”请参见{{3 }}。要测试您编写的内容,您应该访问模型类的meta属性和模型的字段。例如,按照以下方式定义图书模型:
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey('Author', on_delete=models.SETNULL, null=True)
isbn = models.CharField('ISBN', max_length=13, unique=True)
class Meta:
unique_together(('title', 'author'),)
ordering = ['author']
将对Book模型的唯一性,唯一性和顺序进行单元测试,如下所示:
class BookModelTests(TestCase):
@classmethod
def setUpTestdata(cls):
#create an author instance and a book instance
def test_isbn_is_unique(self):
book = Book.objects.get(id=1)
unique = book._meta.get_field('isbn').unique
self.assertEquals(unique, True)
def test_book_is_unique(self):
book = Book.objects.get(id=1)
unique_together = book._meta.unique_together
self.assertEquals(unique_together[0], ('title', 'author'))
def test_book_ordering(self):
book = Book.objects.get(id=1)
ordering = book._meta.ordering
self.assertEquals(ordering[0], 'author')