1

我有一个运动类定义为:

Sport:
 - name
 - other fields

我有一个测试,我想验证添加运动“橄榄球”是否包含在 sport_objects 列表中。

目前,测试很脆弱,在我知道它所在的索引处检查对象的名称:

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

我想将其更改为 self.assertIn() 这样测试就不会那么脆弱,并且如果索引更改也不会受到影响(因为我不关心这里的顺序)。

有没有办法在不依赖索引的情况下改变它(使用 lambda 函数?)?

编辑:

给出的两个答案都很好。我有多个断言语句,所以我的最终解决方案是:

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

2 回答 2

2
self.assertIn('rugby', [sport_object.name for sport_object in sports_objects])
于 2011-01-20T03:38:59.213 回答
1

你总是可以这样做:

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

或类似的东西

import operator
op = operator.attrgetter("name")
self.assertIn('rugby', map(op, sport_objects))
于 2011-01-20T03:40:57.417 回答