我有一个 JSON 解析器库 ( ijson ) 和一个使用 unittest 的测试套件。该库实际上有几个解析实现——“后端”——以具有相同 API 的模块的形式。我想为每个可用的后端自动运行测试套件几次。我的目标是:
- 我想将所有测试放在一个地方,因为它们与后端无关。
- 我希望当前使用的后端的名称在测试失败时以某种方式可见。
- 我希望能够运行单个 TestCase 或单个测试,正如 unittest 通常允许的那样。
那么为此组织测试套件的最佳方式是什么?编写自定义测试运行程序?让 TestCases 自己加载后端?强制性地为每个后端生成单独的 TestCase 类?
顺便说一下,我并没有特别喜欢 unittest 库,如果它能解决问题,我愿意尝试另一个。但 unittest 更可取,因为我已经有了测试代码。
最佳答案
一种常见的方法是将所有测试组合在一个类中,并使用创建后端实例的抽象方法(如果您需要在测试中创建多个实例),或者期望 setUp
创建后端实例。
然后您可以创建子类,根据需要创建不同的后端。
如果您使用的是自动检测 TestCase
的测试加载器子类,你可能需要做一个改变:不要让公共(public)基类成为 TestCase
的子类。 : 而不是将其视为混合,并使后端类成为 TestCase
的子类和混入。
例如:
class BackendTests:
def make_backend(self):
raise NotImplementedError
def test_one(self):
backend = self.make_backend()
# perform a test on the backend
class FooBackendTests(unittest.TestCase, BackendTests):
def make_backend(self):
# Create an instance of the "foo" backend:
return foo_backend
class BarBackendTests(unittest.TestCase, BackendTests):
def make_backend(self):
# Create an instance of the "bar" backend:
return bar_backend
从上面构建测试套件时,您将拥有独立的测试用例FooBackendTests.test_one
和 BarBackendTests.test_one
在两个后端测试相同的功能。
关于python - 如何使用多个后端运行相同的单元测试套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12888562/