Lambda函数简化unittest?

时间:2011-01-20 03:34:16

标签: python unit-testing nose

我有一个Sport类定义为:

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)

2 个答案:

答案 0 :(得分:2)

self.assertIn('rugby', [sport_object.name for sport_object in sports_objects])

答案 1 :(得分:1)

你总是可以这样做:

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

或类似

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