Лямбда-функция для упрощения юнит-теста?

1

У меня есть класс 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)
Теги:
unit-testing
nose

2 ответа

2
Лучший ответ
self.assertIn('rugby', [sport_object.name for sport_object in sports_objects])
  • 0
    Спасибо! Вы были первыми
1

Вы всегда можете сделать:

self.assertIn('rugby', (x.name for x in sports_objects))

или что-то вроде

import operator
op = operator.attrgetter("name")
self.assertIn('rugby', map(op, sport_objects))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню