程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2020-02-14 18:03     阅读(1469)     评论(0)     点赞(19)     收藏(2)


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

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

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

我有一个基类,它被许多其他类扩展和重载,但是我想测试一下这些派生类没有回归。让我们调用基类A及其衍生物A1A2等等。

我想创建一个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-从而使其在模块名称空间中可用。因此,即使发现未查看定义UT的模块,它仍然可以在UT2模块中找到TestCase。

使用基本的TestCases自己定义测试是一个普遍的问题。

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

class UT2(get_base_class()):
    target = A1

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

另一个可能更好的解决方案是使UT也更加抽象。您可以在UT上忽略目标(因为它似乎没有任何作用?),如果没有目标(或者目标是A),请setUp调用skipTest。

一个第三个解决方案是有UT 从TestCase的继承,而是把它作为一个mixin:

class UT2(TestCase, UT):
     target = A1


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/231375/ba656b846918857361cb/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

19 0
收藏该文
已收藏

评论内容:(最多支持255个字符)