我有一个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)
答案 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))