У меня есть класс Sport, который определяется как:
Sport:
- name
- other fields
У меня есть тест, где я хочу проверить, что добавление спортивного регби содержится в списке sport_objects.
В настоящее время тест является хрупким, проверяя имя объекта по индексу, который я знаю, по адресу:
self.assertEquals('rugby', sports_objects[3].name)
Я хотел бы изменить это на self.assertIn(), поэтому тест не такой хрупкий и не будет затронут, если индекс изменится (так как меня здесь не интересует порядок).
Есть ли способ изменить это (используя функцию лямбда?), не полагаясь на индекс?
Edit:
Оба ответа заданы отлично. У меня есть несколько утверждений assert, поэтому мое окончательное решение:
sports_names = [i.name for i in sports_objects]
self.assertIn('rugby', sports_names)
self.assertIn('baseball', sports_names)
self.assertIn('rugby', [sport_object.name for sport_object in sports_objects])
Вы всегда можете сделать:
self.assertIn('rugby', (x.name for x in sports_objects))
или что-то вроде
import operator
op = operator.attrgetter("name")
self.assertIn('rugby', map(op, sport_objects))