可以把整个项目上传 github 后,把 github 地址发下不?
代码太多了,看起来比较费劲,而且好像不是很全。
光从图片上看,我估计是由于 TestAdd 这个类重写了 unittest.TestCase 的 init 方法引起的。倒不是说重写这种方式不对,但它的重写里做了 2 个和父类方法不同的修改:
1、父类原来是一个 method_name 是第一个参数,重写后变成了最后一个参数
2、父类的 method_name 是可选参数,会有 'runTest' 这个默认值,但子类继承后变成了 4 个必须参数
因此,用调用父类的初始化方法一样的方式去调用子类,是调不通的。从你堆栈上看,你用的是 pycharm 自带的 runner ,而非你代码里用的 HtmlTestRunner ,自带的 runner 估计按照 unittest.TestCase 的写法,只传了一个参数,不满足子类重写后要求传 4 个参数的要求,所以报错信息里会说少了后面 3 个参数。
如果要更正让它兼容,可以试试
1、 TestAdd 里面的 def __init__(self, a, b, expected, MethodName):
换成 def __init__(self, MethodName='runTest', a=None, b=None, expected=None)
,
2、执行类中的用例初始化方法从 TestAdd(item[0], item[1], item[2], 'add')
改为 TestAdd(a=item[0], b=item[1], expected=item[2], MethodName='add')
PS:不知道你学习的是什么课程,但这种继承 unittest.TestCase 后改写 init 方法并且参数数量、位置不一样的写法,还是第一次见,应该是属于一种不大专业的写法,而且参数名用了首字母大写的驼峰命名,也不符合 python 的专业命名方法(全部字母小写且用下划线分隔)。基于 unittest.TestCase 做扩展应该用类似于 https://blog.csdn.net/qq_41963758/article/details/80366507 里面的方法,只增加可选参数,不增加或改变必须参数,这样才能保证对父类的操作对子类也继续适用。