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

python-在pytest中替换测试用例?

背景

Pythonunittest框架中,在基础测试集上使用继承将整个测试集应用于新问题,并偶尔添加其他测试是相当普遍的习惯用法.一个简单的例子是:

from unittest import TestCase

class BaseTestCase(TestCase):
    VAR = 3

    def test_var_positive(self):
        self.assertGreaterEqual(self.VAR, 0)

class SubTestCase(BaseTestCase):
    VAR = 8

    def test_var_even(self):
        self.assertTrue(self.VAR % 2 == 0)

运行时将运行3个测试:

$python -m unittest -v
test_var_positive (test_unittest.BaseTestCase) ... ok
test_var_even (test_unittest.SubTestCase) ... ok
test_var_positive (test_unittest.SubTestCase) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.000s

如果您要测试一个类层次结构(父类的每个子类is a子类型为子类),并且因此除了自己的子类之外,还应该能够通过父类的测试套件,则此功能特别有用.

问题

我想切换到使用pytest,但是我有很多以此方式构建的测试.据我所知,pytest打算用fixture替换TestCase类的大部分功能,但是是否有一个允许测试继承的pytest习惯用法,如果可以的话,那是什么?

我知道pytest可以用于运行unittest风格的测试,但是the support is limited是,我想在我的测试中使用pytest的某些“永远不会被支持功能.

解决方法:

Pytest允许您将测试用例按类分组,因此它自然支持测试用例继承.

在将单元测试测试重写为pytest测试时,请记住遵循pytest’s naming guidelines

>类名必须以Test开头
>函数/方法名称必须以test_开头

不遵守此命名方案将阻止收集和执行测试.

为pytest重写的测试如下所示:

class TestBase:
    VAR = 3

    def test_var_positive(self):
        assert self.VAR >= 0

class TestSub(TestBase):
    VAR = 8

    def test_var_even(self):
        assert self.VAR % 2 == 0

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

相关推荐