2009-11-04 80 views
4

我想两个变量添加到我的子类,可以从unittest.TestCase生成重载__init__的unittest.TestCase生成

继承像我有:

import unittest 

class mrp_repair_test_case(unittest.TestCase): 

    def __init__(self, a=None, b=None, methodName=['runTest']): 
      unittest.TestCase.__init__(self) 
      self.a= a 
       self.b = b 

    def test1(self): 
      .......... 
      ....... 

def runtest() 
    mrp_repair_test_case(a=10,b=20) 
    suite = unittest.TestLoader().loadTestsFromTestCase(mrp_repair_test_case) 
    res = unittest.TextTestRunner(stream=out,verbosity=2).run(suite) 

我怎么能acvhieve这一点: 我得到这个错误:

ValueError: no such test method in ****<class 'mrp_repair.unit_test.test.mrp_repair_test_case'>:**** runTest 

感谢

回答

6

乍一看,它看起来就像你需要创建一个mrp_repair_test_case的实例。您当前的线路:

mrp_repair_test_case(a=10,b=20) 

实际上并没有做任何事情。

尝试(未测试):

def runtest(): 
    m = mrp_repair_test_case(a=10, b=20) 
    suite = unittest.TestLoader().loadsTestsFromTestCase(m) 
    res = unittest.TextTestRunner(stream=out, verbosity=2).run(suite) 

这是假设你已经设置了 '出' 的流了。

编辑:

顺便说一句,有没有你不使用安装方法来设置这些值的原因吗?这将是正常的最佳做法。查看loadTestsFromTestCase的文档,它看起来像只接受Class本身而不是它的一个实例,这意味着你只是在反对unittest模块的设计。

编辑2:

在回答您的详细信息,我真的seperately在模块级调用测试之前设置你的uid和光标值。我通常不是一个全球通用的粉丝,但是如果我正确地理解了你,这些值将是:A)只读B)对于同一个客户来说总是相同的,这避免了使用它们的大部分正常陷阱。

编辑3:

要回答你的编辑,如果你真的想使用__init__你或许可以,但你必须推出自己的loadsTestsFromTestCase替代,并且可能是您自己的TestSuite(你必须检查它是如何工作的内部)。正如我上面所说的那样,您将会对模块的现有设计进行工作 - 在某种程度上,如果您决定以这种方式进行测试,则可能比使用unittest更容易从头开始完成自己的解决方案。 修改:刚刚检查过,你肯定会推出自己的TestSuite版本,因为现有的TestSuite会为每个测试创建一个TestCaseClass的新实例。