python - 如何使用多个后端运行相同的单元测试套件

标签 python unit-testing

我有一个 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_oneBarBackendTests.test_one在两个后端测试相同的功能。

关于python - 如何使用多个后端运行相同的单元测试套件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12888562/

相关文章:

python - 使用 Python 在 MySQL 中从 JSON 对象插入多行

python - 如何在imaplib中使用线程搜索方法?

python - 类型错误 : 'builtin_function_or_method' object is unsubscriptable

python - 如何以 UTC 获取当前时间(现在)?

python - 如何测试打印语句?

algorithm - 应用于私有(private)方法的单元测试

C# - 通过 IBM Websphere MQ 接收到的单元测试消息

unit-testing - 使用 Moq,我是否总是需要模拟所有依赖项?

python - 在深度优先搜索有向图的同时跟踪时间

javascript - 在 Jasmine 测试期间,Angular 4 fixture 组件持续存在于 DOM 中