在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
打算用Fixture替换TestCase
类的大多数功能,但是有一个pytest习惯用法可以允许测试继承,如果可以的话,这是什么
我知道pytest
可以用于运行unittest
风格的测试,但是the support is limited,并且我想使用其中的某些“永不支持”功能pytest
在我的测试中。
答案 0 :(得分:3)
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