【发布时间】:2012-02-27 01:34:52
【问题描述】:
根据文档:
另一方面,TestCase 不会截断表并重新加载 测试开始时的初始数据。相反,它包含了测试 在数据库事务结束时回滚的代码 测试。它还可以防止被测代码发出任何提交或 对数据库进行回滚操作,保证回滚在 测试结束将数据库恢复到其初始状态。在 为了保证所有 TestCase 代码都以干净的开头 数据库,Django 测试运行器首先运行所有 TestCase 测试,然后 任何其他可能改变数据库的测试(例如 doctests) 恢复到原来的状态。
如果我有一个看起来像这样的测试:
class GeneralUserCreateTest(TestCase):
def setUp(self):
create_roletypes()
create_permissiontypes()
self.client = Client()
self.event = create_event()
def test_create(self):
create_url = reverse('event_user_signup', args=[self.event.slug])
post_data = {
'signup-account-email': 'foo@bar.com',
'signup-account-password': 'foobar',
'signup-account-password2': 'foobar',
'signup-account-first_name': 'Foo',
'signup-account-last_name': 'Bar',
}
response = self.client.post(create_url, data=post_data)
self.assertEqual(response.status_code, 302)
# check creation of user object
self.assertEqual(User.objects.filter(email=post_data['signup-account-email']).count(), 1)
user = User.objects.get(username=post_data['signup-account-email'])
# user and profile objects created
self.assertEqual(User.objects.all().count(), 1)
self.assertEqual(Profile.objects.all().count(), 1)
# get the first user and profile object to test against submitted field
user = User.objects.all()[0]
profile = Profile.objects.all()[0]
role = Role.objects.filter(event=self.event, profiles=profile)[0]
self.assertEqual(role.roletype.name, 'General')
self.assertEqual(user.username, post_data['signup-account-email'])
self.assertEqual(user.email, post_data['signup-account-email'])
self.assertEqual(profile.first_name, post_data['signup-account-first_name'])
self.assertEqual(profile.last_name, post_data['signup-account-last_name'])
是否仍然需要运行 teardown 方法或 TestCase 类来处理它?如果是这样,考虑到TestCase 类的可用性,什么时候应该使用teardown 方法?
【问题讨论】:
标签: django