相关疑难解决方法(0)

使用基类和子类进行Python单元测试

我目前有一些单元测试,它们共享一组共同的测试.这是一个例子:

import unittest

class BaseTest(unittest.TestCase):

    def testCommon(self):
        print 'Calling BaseTest:testCommon'
        value = 5
        self.assertEquals(value, 5)

class SubTest1(BaseTest):

    def testSub1(self):
        print 'Calling SubTest1:testSub1'
        sub = 3
        self.assertEquals(sub, 3)


class SubTest2(BaseTest):

    def testSub2(self):
        print 'Calling SubTest2:testSub2'
        sub = 4
        self.assertEquals(sub, 4)

if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

以上的输出是:

Calling BaseTest:testCommon
.Calling BaseTest:testCommon
.Calling SubTest1:testSub1
.Calling BaseTest:testCommon
.Calling SubTest2:testSub2
.
----------------------------------------------------------------------
Ran 5 tests in 0.000s

OK
Run Code Online (Sandbox Code Playgroud)

有没有办法重写上面的内容,以便第一个testCommon不被调用?

编辑: 我没有运行上面的5个测试,而是希望它只运行4个测试,2个来自SubTest1,另外2个来自SubTest2.似乎Python unittest自己运行原始的BaseTest,我需要一种机制来防止这种情况发生.

python testing unit-testing

137
推荐指数
9
解决办法
5万
查看次数

__test__ =假魔法属性如何用于测试发现

所以我试图实现类似于单元测试框架如何执行以下操作:

class BaseTest(T.TestCase):
    # Disables this test from being run
    __test__ = False

    def test_foo(self): pass


# However this test is picked up because it doesn't directly have __test__ set
class InheritingTest(BaseTest): pass
Run Code Online (Sandbox Code Playgroud)

我觉得奇怪的一件事:

# >> InheritingTest.__test__
# False
Run Code Online (Sandbox Code Playgroud)

这将表明,我认为这是不使用元类设置 __test__True建筑的类型.

我尝试了通过python库,find . -name "*.py" | xargs grep '__test__'但似乎没有发现任何与此相关的内容.

我解决这个问题的"猜测"方法是执行以下操作:

def is_class_tested(cls):
    return cls.__dict__.get('__test__', True)
Run Code Online (Sandbox Code Playgroud)

然而,这对我来说感觉很脆弱......有没有更清洁/更好的方法来做到这一点在所有情况下都有效?班级是否有可能没有__dict__财产?

python

12
推荐指数
1
解决办法
1054
查看次数

标签 统计

python ×2

testing ×1

unit-testing ×1