Согласно документам:
TestCase, с другой стороны, не обрезает таблицы и не перезагружает начальные данные в начале теста. Вместо этого он включает тест кода в транзакции базы данных, которая откатывается в конце контрольная работа. Он также запрещает тестируемому кодексу выдавать какие-либо фиксации или откаты в базе данных, чтобы убедиться, что откат в конец теста восстанавливает базу данных в исходное состояние. В чтобы гарантировать, что весь код TestCase начинается с чистого база данных, тестовый бегун Django запускает все тесты TestCase, прежде чем любые другие тесты (например, доктрины), которые могут изменять базу данных без восстанавливая его в исходное состояние.
Итак, если у меня есть тест, который выглядит так:
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': '[email protected]',
'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
позаботится об этом? Если да, то когда следует использовать метод teardown
, учитывая доступность класса TestCase
?