可简可繁,
可插库,可字符,
要测试valid,也要测试invalid,
可用csrf,也可用context。
放一个全面的,
实践中,找一个最优的组合就好。
class NewTopicTests(TestCase): def setUp(self): self.board = Board.objects.create(name='Django', description='Django borad.') self.user = User.objects.create_user(username='john', email='john@demo.com', password='123456') def test_csrf(self): url = reverse('new_topic', kwargs={'pk': 1}) response = self.client.get(url) self.assertContains(response, 'csrfmiddlewaretoken') def test_contains_form(self): url = reverse('new_topic', kwargs={'pk': 1}) response = self.client.post(url, {}) form = response.context.get('form') self.assertIsInstance(form, NewTopicForm) def test_valid_form(self): topic = Topic.objects.create( subject='foo', board=self.board, starter=self.user ) post = Post.objects.create( message='bar', topic=topic, created_by=self.user ) data = { # 'subject': topic.subject, # 'message': post.message, 'subject': 'foo', 'message': 'bar', } form = NewTopicForm(data=data) self.assertTrue(form.is_valid()) def test_invalid_form(self): topic = Topic.objects.create( subject='foo', board=self.board, starter=self.user ) post = Post.objects.create( message='', topic=topic, created_by=self.user ) data = { 'subject': topic.subject, 'message': post.message, } form = NewTopicForm(data=data) self.assertFalse(form.is_valid()) def test_new_topic_valid_post_data(self): url = reverse('new_topic', kwargs={'pk': 1}) data = { 'subject': 'Test title', 'message': 'Lorem ipsum dolor sit amet' } response = self.client.post(url, data) self.assertTrue(Topic.objects.exists()) self.assertTrue(Post.objects.exists()) def test_new_topic_invalid_post_data(self): url = reverse('new_topic', kwargs={'pk': 1}) response = self.client.post(url, {}) form = response.context.get('form') self.assertTrue(form.errors) self.assertEqual(response.status_code, 200) def test_new_topic_invalid_post_data_empty_fields(self): url = reverse('new_topic', kwargs={'pk': 1}) data = { 'subject': '', 'message': '' } response = self.client.post(url, data) self.assertEqual(response.status_code, 200) self.assertFalse(Topic.objects.exists()) self.assertFalse(Post.objects.exists())