如何为不同的类运行相同的测试用例?

Bjö*_*lex 10 python unit-testing

我有几个共享一些不变量并具有通用接口的类,我想为每个类自动运行相同的测试.

作为一个例子,假设我有几个类实现不同的方法来分区数据集.这里的常见不变量是,对于所有这些类,所有分区上的并集应该等于原始数据集.

我目前看到的是这样的:

class PartitionerInvariantsTests(unittest.TestCase):
    def setUp(self):
        self.testDataSet = range(100) # create test-data-set

    def impl(self, partitioner):
        self.assertEqual(self.testDataSet, 
                         chain.from_iterable(partitioner(self.testDataSet))
Run Code Online (Sandbox Code Playgroud)

然后我添加了一个不同的函数,该函数调用impl我想要使​​用该类的实例测试的每个类.当针对多个测试功能执行此操作时,此问题变得明显.假设我有5个测试函数和5个我想测试的类.这将使25个函数在调用所有测试时几乎完全相同.

我想到的另一种方法是将模板实现为超类,然后为我想要测试的每个类创建一个子类.子类可以提供实例化类的功能.问题在于默认的测试加载器会将(不可用的)基类视为有效的测试用例并尝试运行它,这会失败.

那么,你的建议是什么?

PS:我使用的是Python 2.6

kev*_*pie 13

您可以使用多重继承.

class PartitionerInvariantsFixture(object):
    def setUp(self):
        self.testDataSet = range(100) # create test-data-set
        super(PartitionInvariantsFixture, self).setUp()

    def test_partitioner(self):
        TestCase.assertEqual(self.testDataSet, 
                     chain.from_iterable(self.partitioner(self.testDataSet))

class MyClassTests(TestCase, PartitionerInvariantsFixture):
    partitioner = Partitioner
Run Code Online (Sandbox Code Playgroud)

  • 为什么我们需要在设置中调用super? (3认同)