替换pytest中的测试用例继承?

问题描述 投票:2回答:1

背景

在Python的unittest框架中,在一组基础测试中使用继承来将一整套测试应用于新问题,并偶尔添加其他测试,这是一种相当常见的习惯用法。一个简单的例子是:

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打算用夹具替换TestCase类的大多数功能,但是有一个允许测试继承的pytest习惯用法,如果是的话,它是什么?

我知道pytest可以用来运行unittest式测试,但the support is limited,我想在我的测试中使用pytest的一些“永远不会支持”的功能。

python unit-testing pytest python-unittest
1个回答
2
投票

Pytest允许您在类中对测试用例进行分组,因此它自然支持测试用例继承。

unittest测试重写为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
© www.soinside.com 2019 - 2024. All rights reserved.