python中unittest的子类用法,用于唯一变量

时间:2017-02-20 23:52:28

标签: python python-unittest

我想知道下面的想法是否可以安全地用于unittest。我遇到的问题是我想要执行完全相同的测试集,但设置工作略有不同。要遵循的Sudo代码:

def reusableTest( var1 ):
  # do base test

class Suite_Finds_Type1( unittest.TestCase, myFinds ):
    @classmethod
    def setUpClass ( self ):
        self.somevar = 'method1'

class Suite_Finds_Type2( unittest.TestCase, myFinds ):
    @classmethod
    def setUpClass ( self ):
        self.somevar = 'method2'

class myFinds( ):
    def test_001( self ):
        reusableTest( self.somevar )

    def test_002( self ):
        reusableTest( self.somevar )

if __name__=='__main__':
    unittest.main( argv=sys.argv, testRunner = unittest.TextTestRunner(verbosity=2))

2 个答案:

答案 0 :(得分:0)

不,这不会真正起作用;您已在测试套件中定义了setUpClass,以便将会运行,myFinds中的那个将被忽略。

顺便说一下,setUpClass应该是一个类方法。

解决此问题的一种方法是使用简单的继承层次结构并将somevar定义为子类中的类变量:

class myFinds(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        # ...
        pass

class Suite_Finds_Type1(myFinds):
    somevar = 'method1'

答案 1 :(得分:0)

如果您使用的是Python 3.4或更高版本,请考虑使用subtests。子测试提供了一种参数化测试的机制。

对于您的代码,您可以考虑以下内容:

def reusableTest( var1 ):
    # do base test

class Suite_Finds( unittest.TestCase ):
    def test_methods( var1 ):
        for method in ('method1', 'method2'):
            with self.subTest(method = method):
                reusableTest(method)

子测试将每个报告作为单独的测试报告,但允许您重复使用测试代码。