假设一个班
fromdjango.dbimport models class Author(models.Model): name = models.CharField(max_length=50) def __str__(self): return self.name def get_absolute_url(self): return reverse('view_author', args=[str(self.id)]) class Book(models.Model): author = models.ForeignKey(Manufacturer, on_delete=models.CASCADE) private = models.BooleanField(default=false) publish_date = models.DateField() def get_absolute_url(self): return reverse('view_book', args=[str(self.id)]) def __str__(self): return self.name
测试例
fromdjango.testimport TestCase from .models import Book, Author class BaseModelTestCase(TestCase): @classmethod def setUpClass(cls): super(BaseModelTestCase, cls).setUpClass() cls.author= Author(name='hawking') cls.author.save() cls.first_book= Book(author=cls.author, name="short_history_of_time") cls.first_book.save() cls.second_book= Book(author=cls.author, name="long_history_of_time") cls.second_book.save() class AuthorModelTestCase(BaseModelTestCase): def test_created_properly(self): self.assertEqual(self.author.name, 'hawking') self.assertEqual(True,self.first_bookin self.author.book_set.all()) def test_absolute_url(self): self.assertEqual(self.author.get_absolute_url(), reverse('view_author', args=[str(self.author.id)])) class BookModelTestCase(BaseModelTestCase): def test_created_properly(self: ... self.assertEqual(1, len(Book.objects.filter(name__startswith='long')) def test_absolute_url(self): ...
一些要点
created_properly测试用于验证Django模型的状态属性。它们有助于在我们更改默认值,file_upload_paths等的地方捕获情景。
absolute_url 可能看似微不足道,但我发现它可以帮助我防止在更改URL路径时出现一些错误
我同样为模型内实现的所有方法编写测试用例(使用mock对象等)
通过定义一个共同点,BaseModelTestCase我们可以在模型之间建立必要的关系,以确保正确的测试。
最后,如有疑问,请编写测试。通过关注细节来捕获琐碎的行为更改,而长时间被遗忘的代码不会导致不必要的麻烦。