与Django一起使用unittest的最佳方法

时间:2018-01-25 19:32:54

标签: python django python-unittest

这似乎是一个非常普遍的问题,但我希望不是。在编写Django代码然后测试之前,我需要为Django后端编写测试。我可以看到的第一个问题之一是,这可能会占用大量资源而且速度极慢。测试Django代码的标准方法是什么?人们是否编写代码片段并在将它们整合到整体中之前单独测试它们还是有比单元测试更好的方法或更好的框架?是否有Django特定的测试框架?

在回答之前,我对Django没有多少经验,但如果你指出我正确的教程,我可以学习。

简单地说,测试Django代码的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

是。 Django带有一个内置的测试模块/框架,在模拟你的api /路由以及重定向方面非常有用。 This广泛使用Django Testcase并使用TDD开发模型

这是一个例子。

from django.test import TestCase
from django.urls import reverse
from django.contrib.auth.models import User
from django import forms

from accounts.forms import RegistrationForm, LoginForm


class AccountsTests(TestCase):

    def setUp(self):
        self.register_data = {
            'email': 'xyz@gmail.com',
            'username': 'new_user1',
            'password': 'test',
            'password_confirmation': 'test'
        }
        User.objects.create_user('test', 'test@example.com', 'test')

    def tearDown(self):
        User.objects.get(username='test').delete()

    def test_get_register(self):
        response = self.client.get(reverse('auth:register'))
        self.assertTemplateUsed(response, 'accounts/register.html')
        self.assertIsInstance(response.context['form'], RegistrationForm)

    def test_get_login(self):
        response = self.client.get(reverse('auth:login'))
        self.assertTemplateUsed(response, 'accounts/login.html')
        self.assertIsInstance(response.context['form'], LoginForm)

    def test_register(self):
        response = self.client.post(
            reverse('auth:register'), data=self.register_data
        )
        self.assertRedirects(response, '/auth/login/')
        # new user was created