Джанго, когда использовать метод демонтажа
Согласно документам:
С другой стороны, 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': '[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
класс?