在 Django 中使用单元测试的最佳方法
Best approach to using unittest with Django
这似乎是一个非常笼统的问题,但我希望不是。在编写 Django 代码然后对其进行测试之前,我需要为 Django 后端编写测试。我看到的第一个问题是这可能会占用大量资源并且速度非常慢。测试 Django 代码的标准方法是什么?人们是编写代码片段并在将它们合并到整体之前单独测试它们,还是有比 unittest 更好的方法或更好的框架?是否有特定于 Django 的测试框架?
在你回答之前,我对 Django 没有太多经验,但如果你给我指出正确的教程,我可以学习。
简单地说,测试 Django 代码的最佳方法是什么?
是的。 Django 带有一个内置测试 module/framework,它在模拟你的 api/routes 和重定向方面非常有用。
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
这似乎是一个非常笼统的问题,但我希望不是。在编写 Django 代码然后对其进行测试之前,我需要为 Django 后端编写测试。我看到的第一个问题是这可能会占用大量资源并且速度非常慢。测试 Django 代码的标准方法是什么?人们是编写代码片段并在将它们合并到整体之前单独测试它们,还是有比 unittest 更好的方法或更好的框架?是否有特定于 Django 的测试框架?
在你回答之前,我对 Django 没有太多经验,但如果你给我指出正确的教程,我可以学习。
简单地说,测试 Django 代码的最佳方法是什么?
是的。 Django 带有一个内置测试 module/framework,它在模拟你的 api/routes 和重定向方面非常有用。 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