pytest中的分组测试:类与普通函数

2024-05-12 17:59:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pytest测试我的应用程序。 pytest支持两种编写测试的方法(据我所知):

  1. 课堂上:

test_feature.py -> class TestFeature -> def test_feature_sanity

  1. 在函数中:

    test_feature.py -> def test_feature_sanity

是否需要在课堂上分组测试?是否允许将unittest内置模块向后移植? 你认为哪种方法更好?为什么?在

提前谢谢!在


Tags: 模块方法函数pytest应用程序pytestdef
2条回答

通常在单元测试中,我们测试的对象是单个函数。也就是说,一个函数会产生多个测试。在阅读测试代码时,将单个单元的测试以某种方式组合在一起是很有用的(这也允许我们运行特定功能的所有测试),因此我们有两个选择:

  1. 将每个功能的所有测试放在专用模块中
  2. 将每个函数的所有测试放在一个类中

在第一种方法中,我们仍然有兴趣以某种方式对与源模块(例如utils.py)相关的所有测试进行分组。现在,由于我们已经使用模块对函数的测试进行分组,这意味着我们应该使用对源模块的测试进行分组。在

结果是一个源函数映射到一个测试模块,一个源模块映射到一个测试。在

在第二种方法中,我们将使用一个源函数映射到一个测试类(例如my_function()->;TestMyFunction),而一个源模块映射到一个测试模块(例如utils.py->;test_utils.py)。在

这可能取决于具体情况,但第二种方法,即对您正在测试的每个函数进行一类测试,对我来说似乎更清楚。此外,如果我们正在测试sourceclasses/方法,那么我们可以简单地使用测试类的继承层次结构,并且仍然保留一个源模块->一个测试模块映射。在

最后,与包含多个函数测试的平面文件相比,这两种方法的另一个好处是,在类/模块已经确定要测试的函数的情况下,可以为实际测试使用更好的名称,例如test_does_x和{},而不是{}和{}。在

对于将测试组织成模块和类,没有严格的规则。这是个人喜好的问题。一开始我就意识到,组织考试的时间不多了。现在我只是将测试函数收集到模块(文件)中。在

我可以看到一个有效的用例,当一些测试可以逻辑地组织到同一个文件中,但是仍然有额外的层次组织到类中(例如使用类范围的fixture)。但也可以将其拆分为多个模块。在

相关问题 更多 >