问题描述
最近在使用python3的mock进行unittest时遇到一个问题,有一个api大概如下
class MyClass(SuperClass)
def my_method(self):
super(MyClass, self).my_method()
something else
想要使用如下代码做mock测试
def test_my_method(self):
# Given
my_class = mock.Mock()
# When
MyClass.my_method(my_class)
# Then
assert something
直接报错如下
TypeError: super(type, obj): obj must be an instance or subtype of type
冷(hu)静(luan)分析
看来super()这个方法不处理一下是不行的,具体为啥不得而知了,也没有研究,后面如果有结论了再来更新
解决方案
虽然不知道为啥会这样,但是还是找到了解决方法,按照如下写case,就没有问题
@mock.patch("path_to_module.super", mock.Mock())
def test_my_method(self):
# Given
my_class = mock.Mock()
# When
MyClass.my_method(my_class)
# Then
assert something