Mocking Class Functions
我正在尝试对一个类进行单元测试,这个类有一个相当复杂的初始化,涉及到对服务器和外部组件的调用。我发现你可以用UnitTest magicMock来伪造一个init。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class my_class: def __init__(self, arg1, arg2): self.var = arg1 self.method1(arg2) def method1(self, arg): var ="Hello" + arg self.method2(var) def method2(self, var): print(var) SELF = MagicMock() my_calss.my_class.__init__(SELF, arg1, arg2) |
这太棒了,因为与服务器对话的所有代码都在其他方法中,我可以确保uuinit_uuuu调用某些方法。
当我想测试一个调用另一个方法的方法时,问题就出现了。
1 2 3 4 | SELF = MagicMock() my_class.__init__(SELF, arg1, arg2) SELF.method2 = my_class.method2 my_class.method1(SELF, arg) |
我希望方法2中的自我是自我,但方法2中永远不会有自我。有没有一种方法可以确保方法2获得被嘲弄的自我?
或者另一种测试类方法的方法,它不涉及大量的补丁?
你可以直接删掉这门课而不是嘲笑。
class MyClassStub(MyClass):
def __init__(self):
pass # bypass parents init
我认为你不能用
一种方法是使用
例如
1 2 3 4 5 6 | instance = my_class.__new__(my_class) # Manually initialize properties as needed. instance.usually_set_by_init = 3 # Use the instance like normal. instance.method1(arg) |
如果你没有听说过