【问题标题】:Many pytest fixtures vs. one large "container" fixture许多 pytest 固定装置与一个大型“容器”固定装置
【发布时间】:2018-12-16 07:59:51
【问题描述】:

我们有一个使用 pytest 测试的大型 python 项目,目前使用 unittest 样式类,我们开始将其迁移到基于模块的函数样式测试。

我们正在讨论是否应该:

  1. 将我们的大型测试基类拆分为许多小型、独立的 pytest 固定装置;
  2. 维护一个大型夹具,该夹具会延迟导入所有其他夹具。

许多装置的优点:

  • 模块化且可能易于维护
  • 每个测试只使用它需要的东西

大型灯具的优点:

  • 样板代码更少,每个测试只有一个额外的关键字 arg

我们应该怎么做?欢迎任何意见,只要解释清楚。谢谢:)

【问题讨论】:

    标签: python unit-testing pytest


    【解决方案1】:

    使用特定的灯具比大的有很多优势。由于这个 pytest 获得了它的流行。

    1. 不同的夹具可以重现被测系统的各种互斥状态。当您想要测试系统行为的各种情况时,这很有用。单个夹具无法提供这种灵活性。
    2. Pytest 允许您灵活地组装对夹具when one fixture uses the results of the execution of another 的调用。分解是一种有效的编程模式,测试也不例外。
    3. Fixtures in pytest can be parameterized,这是一个非常有用的功能,但是如果你为所有测试制作一个大夹具,它的应用将是不可能的。
    4. Conftest.py is a directory specific in pytest. 所以 pytest 中的固定装置可以是全局的(位于 conftest 中)、本地的(位于测试模块内)和中间的(位于包级别的 conftest 中)。这使您可以重用通用代码,同时在特定情况下不会失去灵活性。
    5. Fixtures have scope(函数、类、模块、会话),这提供了额外的灵活性。

    pytest 框架的根本思想是在必要时在那些级别使用fixture。这是相对于 xUnit 风格的一大优势,但是如果你不利用这些优势,那么过渡到 pytest 是没有意义的。

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      相关资源
      最近更新 更多