unittest.testcas的init重载

2024-04-29 05:50:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在继承自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

谢谢


Tags: testselfnoneinitdefmrpunittest子类
1条回答
网友
1楼 · 发布于 2024-04-29 05:50:37

乍一看,您似乎需要创建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”设置为流。

编辑:

顺便问一下,有什么理由不使用设置方法来设置这些值吗?这是正常的最佳实践。在loadTestsFromTestCase的文档中,它看起来只接受类本身,而不接受类的实例,这意味着您正在反对unittest模块的设计。

编辑2:

为了响应您的进一步信息,我实际上会在调用测试之前在模块级别分别设置uid和游标值。我通常不是globals的超级粉丝,但如果我理解正确的话,这些值将是a)只读B)对于同一个客户总是相同的,这样可以避免使用它们时的大多数常见陷阱。

编辑3:

要回答您的编辑,如果您真的想使用__init__,您可能可以,但是您必须滚动您自己的loadsTestsFromTestCase备选方案,也可能是您自己的TestSuite(您必须检查其工作原理的内部)。如上所述,您将针对模块的现有设计进行工作—如果您决定以这种方式进行测试,那么完全从头开始运行自己的解决方案可能比使用unittest更容易。修改:只要选中,就必须滚动自己的TestSuite版本,因为现有版本为每个测试创建一个testcase类的新实例。

相关问题 更多 >