重载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)
我该怎么做到这一点呢?我遇到了这个错误:
ValueError: no such test method in ****<class 'mrp_repair.unit_test.test.mrp_repair_test_case'>:**** runTest
谢谢!
1 个回答
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)
这假设你已经把 'out' 设置成一个流了。
补充:
顺便问一下,你为什么不使用 setUp 方法来设置这些值呢?这样做是比较常规的好习惯。根据 loadTestsFromTestCase 的文档,它似乎只接受类本身,而不是它的实例,这意味着你可能在和 unittest 模块的设计方向相悖。
补充 2:
针对你提供的更多信息,我建议你在调用测试之前,先在模块级别单独设置 uid 和 cursor 的值。我通常不太喜欢使用全局变量,但如果我理解正确的话,这些值 A) 是只读的 B) 对于同一个客户总是相同的,这样可以避免使用它们时常见的问题。
补充 3:
回应你的补充,如果你真的想使用 __init__
,你可能可以做到,但你需要自己实现一个 loadTestsFromTestCase 的替代方案,可能还需要自己做一个 TestSuite(你得检查一下它的内部工作原理)。正如我之前所说的,你会在与模块的现有设计相悖的情况下工作——如果你决定以这种方式进行测试,可能从头开始自己实现一个解决方案会比使用 unittest 更简单。补充:我刚检查过,你肯定需要自己实现一个 TestSuite 的版本,因为现有的会为每个测试创建一个 TestCaseClass 的新实例。