Python 我应该在什么时候创建多个测试函数,以及应该为全局变量使用pytest夹具?

Python 我应该在什么时候创建多个测试函数,以及应该为全局变量使用pytest夹具?,python,unit-testing,pytest,Python,Unit Testing,Pytest,我有一个基于正则表达式对数据进行过滤的方法。我有多个函数,每个函数返回一个正则表达式列表,我将其组合成一个正则表达式字符串。然后我迭代我的数据列表,如果任何数据与组合字符串匹配,我将从数据列表中删除该项 我想测试一下,当函数针对一组数据运行时,是否会删除过滤项,以及是否会删除未过滤项。我想测试与来自上述函数的每个正则表达式集相匹配的数据 我想创建一个元组列表,可以传递给参数化。每个元组将包括原始列表、已删除项的列表和剩余项的列表。与其创建作为全局变量的参数化元组列表,不如使用fixture来实现

我有一个基于正则表达式对数据进行过滤的方法。我有多个函数,每个函数返回一个正则表达式列表,我将其组合成一个正则表达式字符串。然后我迭代我的数据列表,如果任何数据与组合字符串匹配,我将从数据列表中删除该项

我想测试一下,当函数针对一组数据运行时,是否会删除过滤项,以及是否会删除未过滤项。我想测试与来自上述函数的每个正则表达式集相匹配的数据

我想创建一个元组列表,可以传递给参数化。每个元组将包括原始列表、已删除项的列表和剩余项的列表。与其创建作为全局变量的参数化元组列表,不如使用fixture来实现这一点

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

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

还是编写一个函数并在同一个函数中测试两个东西更好?

就我个人而言,我喜欢每个测试用例都测试一个函数。如果你在测试不同的东西,我倾向于把它们分开。这是因为当一个测试失败时,我想知道什么功能坏了,而不仅仅是一个大的测试功能失败了。这通常会加快使事情恢复工作的周期时间

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

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

以下是一个创建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.
如果您认为它作为一个变量看起来更整洁,那么就这样做吧!毕竟,这只是测试模块

有一些官方的例子:


至于什么应该成为固定比赛,这是一个很难回答的问题,可能会引起广泛的争论。我建议对不同的选项进行原型设计并进行比较。

如果我在一个给定的测试模块中有几个固定装置,并且一个固定装置仅用于几个测试,那么该固定装置应该放在使用它的测试之前,还是放在所有模块级固定装置的顶部?Thanks@Mark我会把所有的固定装置放在文件的顶部。我的问题可能重复2年。我不确定辩论是否应该开始,如果它现在是重复的。另一个问题所回答的部分只是一个旁白。然而,它确实回答了这个问题。