Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 修补Factory类中的对象会产生TypeError:super()参数1必须是type,而不是MagicMock_Python_Python 3.x_Oop_Mocking_Monkeypatching - Fatal编程技术网

Python 修补Factory类中的对象会产生TypeError:super()参数1必须是type,而不是MagicMock

Python 修补Factory类中的对象会产生TypeError:super()参数1必须是type,而不是MagicMock,python,python-3.x,oop,mocking,monkeypatching,Python,Python 3.x,Oop,Mocking,Monkeypatching,我想模拟工厂中的对象并得到错误“我得到的错误是: TypeError:super()参数1必须是类型,而不是MagicMock。“ 我读了帖子:,但我不知道如何从对象中派生MagicMock 我的代码如下: from unittest.mock import patch class B(): pass class A(B): pass class AFactory: def create(self): a = A() super(

我想模拟工厂中的对象并得到错误“我得到的错误是:

TypeError:super()参数1必须是类型,而不是MagicMock。“

我读了帖子:,但我不知道如何从对象中派生MagicMock

我的代码如下:

from unittest.mock import patch

class B():
    pass

class A(B):
    pass


class AFactory:

    def create(self):
        a = A()
        super(A, a).__init__()

with patch('mymain.A'):
    AFactory().create()
错误:

TypeError: super() argument 1 must be type, not MagicMock

这个问题的原因是什么?我使用工厂来表示“a”,因为如果我在工厂中有名为separate的超类,我可以做更好的集成测试。

调用
super
有什么意义?首先,它为什么在那里?为什么要使用单独的
AFactory
class?我的“a-class”实际上是“class Controller(cmd.cmd)”。如果我想做一个集成测试,我不想调用cmd.cmd的super(),因为它会提示输入。如果您有更好的建议,请让我知道。您应该删除提示,并找到其他方式向实例提供数据。或者你可以模拟
输入
当然……调用
超级
有什么意义?首先,它为什么在那里?为什么要使用单独的
AFactory
class?我的“a-class”实际上是“class Controller(cmd.cmd)”。如果我想做一个集成测试,我不想调用cmd.cmd的super(),因为它会提示输入。如果您有更好的建议,请让我知道。您应该删除提示,并找到其他方式向实例提供数据。或者你可以模拟
输入
当然。。。