简化unittest的Lambda函数?
我有一个叫做 Sport 的类,定义如下:
Sport:
- name
- other fields
我有一个测试,想要验证在 sport_objects 列表中是否包含运动项目 'rugby'。
目前,这个测试比较脆弱,因为它是通过检查我知道的索引位置上的对象名称来进行的:
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 个回答
1
你可以随时这样做:
self.assertIn('rugby', (x.name for x in sports_objects))
或者类似这样的做法:
import operator
op = operator.attrgetter("name")
self.assertIn('rugby', map(op, sport_objects))
2
当然可以!请看下面的内容:
在编程中,有时候我们需要让程序做一些事情,比如在特定的条件下执行某段代码。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会按照我们的要求去做。
比如说,如果你想让程序在用户输入一个数字时,检查这个数字是否大于10。如果是,那么程序就会显示“这个数字很大!”;如果不是,程序就会显示“这个数字不大。”这就是一个简单的条件判断。
通过这种方式,我们可以让程序更智能,能够根据不同的情况做出不同的反应。这种技术在编程中非常常见,帮助我们处理各种各样的任务。
希望这个解释能帮助你更好地理解编程中的条件判断!
self.assertIn('rugby', [sport_object.name for sport_object in sports_objects])