我想在继承自 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
谢谢
最佳答案
乍一看,您似乎需要创建一个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 的文档,它似乎只接受 Class 本身而不是它的实例,这意味着您宁愿反对 unittest 模块的设计。
编辑 2:
为了响应您的进一步信息,我实际上会在调用测试之前在模块级别分别设置您的 uid 和 cursor 值。我通常不是全局变量的忠实粉丝,但如果我对你的理解正确,这些值将是 A) 只读 B) 对于同一客户始终相同,这避免了使用它们时的大多数正常陷阱。
编辑 3:
要回答你的编辑,如果你真的想使用 __init__
你可能可以,但你将不得不推出你自己的 loadsTestsFromTestCase 替代品,可能还有你自己的 TestSuite(你必须检查它是如何工作的内部结构)。正如我上面所说,您将与模块的现有设计背道而驰——在某种程度上,如果您决定以这种方式进行测试,那么从头开始完全推出您自己的解决方案可能比使用 unittest 更容易。 修改:刚刚检查过,您肯定必须推出自己的 TestSuite 版本,因为现有版本会为每个测试创建一个新的 TestCaseClass 实例。
关于python - 重载 unittest.testcase 的 __init__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1672520/