Лямбда-функция для упрощения юнит-теста? - PullRequest
1 голос
/ 20 января 2011

У меня есть спортивный класс, определенный как:

Sport:
 - name
 - other fields

У меня есть тест, в котором я хочу убедиться, что добавление спортивного регби содержится в списке sport_objects.

В настоящее время тест является хрупким, проверяя имя объекта по индексу, который, как я знаю, находится по адресу:

self.assertEquals('rugby', sports_objects[3].name)

Я бы хотел изменить это на self.assertIn (), чтобы тест не был таким хрупким, и на него не повлияет изменение индекса (поскольку меня здесь не волнует порядок)

Есть ли способ изменить это (используя лямбда-функцию?), Не полагаясь на индекс?

Изменить:

Оба ответа отлично работают. У меня есть несколько утверждений assert, поэтому мое окончательное решение:

sports_names = [i.name for i in sports_objects]
self.assertIn('rugby', sports_names)
self.assertIn('baseball', sports_names)

Ответы [ 2 ]

2 голосов
/ 20 января 2011
self.assertIn('rugby', [sport_object.name for sport_object in sports_objects])
1 голос
/ 20 января 2011

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

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

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

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