如何在不同数据上重复运行Python单元测试?

4 投票
2 回答
1974 浏览
提问于 2025-04-16 04:18

我正在测试一些类,这些类的作用是解析XML文件并创建数据库对象(用于一个Django应用)。每种不同的XML类型都有一个单独的解析和创建类(它们实际上创建的对象是一样的)。所有的解析类都有一个共同的父类,所以它们的接口都是相同的。

我想定义一组测试,然后提供一个解析类的列表,让这组测试能用每个解析类来运行。每个解析类会定义一个文件名前缀,这样它就能读取正确的输入文件和期望的结果文件。

我希望所有的测试都能运行(即使有一个测试失败也不应该停止),而且当有测试失败时,应该能报告出是哪一个解析类出了问题。

2 个回答

2

如果你在使用 unittest,这个工具的好处是它被django支持,并且大多数系统上都已经安装了,你可以这样做:

class TestBase(unittest.TestCase)
    testing_class = None

    def setUp(self):
        self.testObject = testing_class(foo, bar)

然后要运行测试的话,可以这样:

for cls in [class1, class2, class3]:
    testclass = type('Test'+cls.__name, (TestBase, ), {'testing_class': cls})
    suite = unittest.TestLoader().loadTestsFromTestCase(testclass)
    unittest.TextTestRunner(verbosity=2).run(suite)

我没有测试过这段代码,但我之前做过类似的事情。

3

使用 nose 这个工具,你可以定义 测试生成器。你可以先定义一个测试案例,然后写一个测试生成器,这样它就会为每个解析器类生成一个测试函数。

撰写回答