Является ли такой способ использования assertRaises излишним?
У меня есть следующий метод :
def create_user(self, email, password, last_name, first_name):
# (...)
, где все четыре параметра являются обязательными. При тестировании этого метода я должен проверить с помощью assertRaises
, будет ли выброшен TypeError
, если один из параметров отсутствует? Было бы довольно утомительно писать это :
#(...)
with self.assertRaises(TypeError):
User.objects.create_user()
User.objects.create_user(email='')
User.objects.create_user(password='')
User.objects.create_user(first_name='')
User.objects.create_user(last_name='')
User.objects.create_user(email='', password='')
User.objects.create_user(email='', first_name='')
User.objects.create_user(email='', last_name='')
User.objects.create_user(first_name='', last_name='')
User.objects.create_user(first_name='', password='')
User.objects.create_user(last_name='', password='')
User.objects.create_user(email='', first_name='', last_name='')
User.objects.create_user(email='', first_name='', password='')
User.objects.create_user(email='', last_name='', password='')
User.objects.create_user(first_name='', last_name='', password='')
Какой метод имеет больше обязательных параметров?
Я пока знаю о нем только понаслышке, но Эндрю Пинкхэм очень рекомендовал его на своем курсе по Django: hypothesis
.
Он доступен со специфическими для Django дополнениями через hypothesis[django]
, см. здесь. Конкретно для вашего случая, вы можете использовать его для генерации словарей, которые вы затем распаковываете как аргументы для вашего генератора (hypothesis.strategies.dictionaries
с max_size
на один меньше, чем ваше общее количество необходимых аргументов, также возможно в некоторой комбинации с hypothesis.strategies.fixed_dictionaries
). Хотя кривая обучения будет немного крутой, но это вполне может стоить того, потому что это позволит вам тестировать гораздо больше случаев (включая крайние случаи) с гораздо меньшим количеством кода.