我想知道下面的想法是否可以安全地用于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))
答案 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)
子测试将每个报告作为单独的测试报告,但允许您重复使用测试代码。