简化unittest的Lambda函数?

1 投票
2 回答
635 浏览
提问于 2025-04-16 10:17

我有一个叫做 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])

撰写回答