返回介绍

经典的 Xunit 风格设置

发布于 2023-08-07 21:02:40 字数 2422 浏览 0 评论 0 收藏 0

本节描述了一种经典的和流行的方法,即如何在每个模块/类/函数的基础上实现fixture(设置和拆卸测试状态)。

注解

虽然这些设置/拆卸方法对于来自 unittestnose 背景,您也可以考虑使用pytest的更强大的 fixture mechanism 它利用依赖注入的概念,允许使用更模块化和更可扩展的方法来管理测试状态,尤其是对于大型项目和功能测试。您可以在同一个文件中混合两种夹具机构,但测试方法是 unittest.TestCase 子类不能接收fixture参数。

模块级设置/拆卸

如果在单个模块中有多个测试函数和测试类,则可以选择实现以下fixture方法,这些方法通常对所有函数调用一次:

def setup_module(module):
    """ setup any state specific to the execution of the given module."""


def teardown_module(module):
    """teardown any state that was previously setup with a setup_module
    method.
    """

从Pytest-3.0开始, module 参数是可选的。

类设置/拆卸

类似地,在调用类的所有测试方法之前和之后,在类级别调用以下方法:

@classmethod
def setup_class(cls):
    """setup any state specific to the execution of the given class (which
    usually contains tests).
    """


@classmethod
def teardown_class(cls):
    """teardown any state that was previously setup with a call to
    setup_class.
    """

方法和功能级别设置/拆卸

类似地,在每个方法调用周围调用以下方法:

def setup_method(self, method):
    """setup any state tied to the execution of the given method in a
    class.  setup_method is invoked for every test method of a class.
    """


def teardown_method(self, method):
    """teardown any state that was previously setup with a setup_method
    call.
    """

从Pytest-3.0开始, method 参数是可选的。

如果您希望直接在模块级定义测试函数,您还可以使用以下函数来实现fixture:

def setup_function(function):
    """setup any state tied to the execution of the given function.
    Invoked for every test function in the module.
    """


def teardown_function(function):
    """teardown any state that was previously setup with a setup_function
    call.
    """

从Pytest-3.0开始, function 参数是可选的。

评论:

  • 每个测试过程可以多次调用设置/拆卸对。

  • 如果相应的设置函数存在并且失败/被跳过,则不会调用拆卸函数。

  • 在Pytest-4.2之前,Xunit样式的函数不遵守fixture的作用域规则,因此,例如 setup_method 在会话范围的autouse fixture之前调用。

    现在,Xunit样式的函数与fixture机制集成在一起,并遵守调用中涉及的fixture的适当范围规则。

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文