2010-01-21 51 views
1

我有一个测试套件,我试图让它与我创建的测试一起工作。测试工作如果我单独运行它们,但我想在测试套件中运行它们。下面的代码显示创建的测试套件:测试套件unittest

class AbsoluteMoveTestSuite(unittest.TestSuite): 

def makeAbsoluteMoveTestSuite(): 
    suite = unittest.TestSuite() 
    suite.addTest(TestAbsoluteMove("BasicAbsolutePan")) 
    suite.addTest(TestAbsoluteMove("VerifyAbsolutePan")) 
    suite.addTest(TestAbsoluteMove("VerifyAbsoluteTilt")) 
    suite.addTest(TestAbsoluteMove("VerifyAbsolutePanSpeed")) 
    suite.addTest(TestAbsoluteMove("VerifyAbsoluteTiltSpeed")) 
    return suite 

def suite(): 
    return unittest.makeSuite(TestAbsoluteMove) 

所产生权利要求所述的误差不存在的模块:

import unittest 

def suite(): 
    modules_to_test = ('TestAbsoluteMove', 'TestContinuousMove') # and so on 
    alltests = unittest.TestSuite() 
    for module in map(__import__, modules_to_test): 
     alltests.addTest(unittest.findTestCases(module)) 
    return alltests 

if __name__ == '__main__': 
    unittest.main(defaultTest='suite') 

我已经把这个代码到我的测试代码与套件连接起来命名为'TestAbsoluteMove'和TestContinuousMove'。有谁知道如何让这个代码工作?

感谢

回答

2

Nose使得这种没有脑子的事情。它会自动检测您的测试并将它们作为套件运行。 (您也可以通过传递标志来运行特定的测试。)

+4

我不认为增加额外的依赖关系是对这个问题的正确答案。 –

2

TestAbsoluteMove是一个类,它需要来自某个地方。无论您在哪里定义AbsoluteMoveTestSuite类,都需要导入TestAbsoluteMove。

0

unittest有点像这样使用很痛苦。我会非常推荐你按照Alison的建议看看nose或者使用我个人最喜欢的Python测试工具py.test。只需按照特定的命名约定创建函数并让它翻转即可!整个xUnit的东西并不适合Python领域。

2

这就是我创造我的测试套件(loadTestFromTestCase检测自动将您的测试)

def suite(): 
    """ returns all the testcases in this module """ 
    return TestLoader().loadTestsFromTestCase(AbsoluteMoveTestSuite) 

,并在一次我有一个集成了所有subsuites(注意所有的进口套件运行它们,你将需要导入它们,然后才可以在你的新模块中使用)

import sys 
import unittest 

import test.framework.asyncprocess as a 
import test.framework.easyconfig as e 
import test.framework.modulegenerator as mg 
import test.framework.modules as m 
import test.framework.filetools as f 
import test.framework.repository as r 
import test.framework.robot as robot 
import test.framework.easyblock as b 
import test.framework.variables as v 
import test.framework.github as g 
import test.framework.toolchainvariables as tcv 
import test.framework.toolchain as tc 
import test.framework.options as o 
import test.framework.config as c 


# call suite() for each module and then run them all 
SUITE = unittest.TestSuite([x.suite() for x in [r, e, mg, m, f, a, robot, b, v, g, tcv, tc, o, c]]) 

# uses XMLTestRunner if possible, so we can output an XML file that can be supplied to Jenkins 
xml_msg = "" 
try: 
    import xmlrunner # requires unittest-xml-reporting package 
    xml_dir = 'test-reports' 
    res = xmlrunner.XMLTestRunner(output=xml_dir, verbosity=1).run(SUITE) 
    xml_msg = ", XML output of tests available in %s directory" % xml_dir 
except ImportError, err: 
    sys.stderr.write("WARNING: xmlrunner module not available, falling back to using unittest...\n\n") 
    res = unittest.TextTestRunner().run(SUITE) 
+0

xmlrunner.XMLTestRunner(output = xml_dir,verbosity = 1).run(SUITE)是我一直在寻找的 –