Python Unittest2 - 避免在 discover() 中包含 TestCase

标签 python unit-testing unittest2

我正在使用 unittest2Python2.5使用 unittest.TestLoader.discover 发现测试,像这样:

suite = unittest2.loader.TestLoader().discover(test_path)
unittest2.TextTestRunner(verbosity=2,
        resultclass=ColorTestResult).run(suite)

对于一些 test_path在我的项目的基础上。

我有一个被许多其他类扩展和重载的基类,但我想测试这些派生类没有回归。我们称该基类为 A及其衍生物A1 , A2

我想创建一个 unittest2.TestCase可以为 A 的每个派生对象重载的基类.换句话说,我想要一个类似这样的层次结构:

class A:
    pass

class A1(A):
    pass

class UT(unittest2.TestCase):
    target = A

class UT2(UT):
    target = A1

现在的诀窍是我正在制作 A进入一个抽象类,并且UT将在几乎所有可以适当通过 UT2 的测试用例上失败等

对我来说最简单的解决方案似乎是使用 unittest2 的 discover以某种方式“跳过”UT .我认为这可以通过将其放入一个匹配模式“test*.py”以外的文件中来实现,尽管情况似乎并非如此。

是否有适合上述情况的解决方案?

如果有任何想法和建议,我将不胜感激。

最佳答案

我猜测问题在于 UT2 继承自 UT,因此定义 UT2 的模块导入 UT - 因此使其在模块命名空间中可用。因此,即使 discovery 没有查看定义 UT 的模块,它仍然可以在 UT2 模块中找到 TestCase。

这是拥有自己定义测试的基本测试用例的普遍问题。

有几种可能性。一种是通过函数公开 UT,因此包含 UT2 的模块直接导入函数而不是 UT:

class UT2(get_base_class()):
    target = A1

可以使用 super() 访问 UT 上的属性。

另一个也许更好的解决方案是使 UT 也更加抽象。您可以省略 UT 上的目标(因为它似乎没有任何用处?)并且如果没有目标(或者如果目标是 A)则让 setUp 调用 skipTest。

第三个​​解决方案是让 UT 继承自 TestCase,而是将其用作混合:

class UT2(TestCase, UT):
     target = A1

关于Python Unittest2 - 避免在 discover() 中包含 TestCase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286499/

相关文章:

python - Django/Travis CI - 配置 .travis YAML 文件以首先启动本地主机服务器,然后在不挂起的情况下运行我的测试?

python - Kivy:从 python 代码更改屏幕

python - 如何将个人PNG数据集放入Sci-Kit Learn中进行图像识别?

java - 从模拟方法中的方法返回类。莫基托

python - 如何在python setup.py test中使用unittest2

python - python中的aws lambda context.succeed(在节点中)替代方案

c# - 如何使用 Moq 测试方法调用顺序

c# - 使用 Moq 测试 get/set

pythonunittest2assertAlmostEqual 与 `places` 工作不正确

python - 如何在单个 Python 单元测试中处理多个断言?