微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我何时应该创建多个测试函数,并且应该为全局变量使用pytest固定装置?

我有一种方法,可以基于正则表达式对数据进行一些过滤.我有多个函数,每个函数都返回一个正则表达式列表,我将它们组合成一个正则表达式字符串.然后,我遍历数据列表,如果任何数据与组合字符串匹配,我将从数据列表中删除该项目.

我想测试一下,当该函数针对一组数据运行时,已过滤的项将被删除,而未过滤的项将不会被删除.我想对此进行测试,以查找与上述函数中的每组正则表达式匹配的数据.

我考虑过创建一个元组列表,我可以将其传递给参数化.每个元组包括原始列表,已删除项目的列表和其余项目的列表.与其创建用于参数化的元组列表作为全局变量,不如使用夹具来实现此目的?

另外,编写单独的函数检查不同行为是否更好?如:

test that the function removes matched items
test that the function does not remove unmatched items

还是编写一个函数并在同一函数中同时测试这两项?

解决方法:

就个人而言,我喜欢每个测试用例的测试功能.如果您要测试其他事物,我倾向于将它们分开.那是因为当测试失败时,我想知道什么功能坏了,而不仅仅是一个大型测试功能已经失败了.这通常会加快使事情恢复正常工作的周期时间.

如果及时进行设置,这可能变得很麻烦,但是我认为这更多地表明了单元测试应该具有更好的隔离性,例如使用内存数据库或对类似文件的对象而不是对文件等进行操作等. .

至于全局问题或不是问题的一部分,我通常只是匿名列出它们,而不是进行任何变量.但是,底部链接使用变量.

作为参考,下面是一个示例,该示例使用函数的参数化和夹具的params参数创建了9个测试:

@pytest.fixture(params=[1, 2, 3])
def number(request):
    return request.param

@pytest.mark.parametrize('letter', ['a', 'b', 'c'])
def test_combinations(number, letter):
    pass  # test assertions, etc.

如果您认为它作为变量看起来更整洁,那就去做吧!毕竟,这只是测试模块…

有一些官方示例:
https://docs.pytest.org/en/latest/fixture.html#fixture-parametrize

至于什么是固定装置,这是一个可能被广泛争论的难题.我建议对不同的选项进行原型设计并进行比较.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐