Lambda 函数简化单元测试?

发布于 2024-10-13 02:29:43 字数 582 浏览 7 评论 0原文

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

I have an Sport class defined as:

Sport:
 - name
 - other fields

I have a test where I want to verify that adding the sport 'rugby' is contained in the list of sport_objects.

Currently, the test is brittle, checking the name of the object at the index I know it's at:

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

I'd like to change this to self.assertIn() so the test isn't as brittle and won't be affected if the index changes (since I don't care about the order here).

Is there a way to change this (using a lambda function?) without relying on the index?

Edit:

Both answers given work great. I have multiple assert statements, so my final solution is:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

疏忽 2024-10-20 02:29:43
self.assertIn('rugby', [sport_object.name for sport_object in sports_objects])
self.assertIn('rugby', [sport_object.name for sport_object in sports_objects])
想你只要分分秒秒 2024-10-20 02:29:43

你总是可以这样做:

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

或者类似的事情

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

You can always do:

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

or something like

import operator
op = operator.attrgetter("name")
self.assertIn('rugby', map(op, sport_objects))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文