Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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 AttributeError:_mock_扩展MagicMock类时的方法_Python_Python Unittest_Magicmock - Fatal编程技术网

Python AttributeError:_mock_扩展MagicMock类时的方法

Python AttributeError:_mock_扩展MagicMock类时的方法,python,python-unittest,magicmock,Python,Python Unittest,Magicmock,可以扩展MagicMock类来创建模拟对象并在单元测试中使用它吗 如果我在init函数中没有任何代码,那么扩展该类似乎工作得很好 class MockAPI(MagicMock): def __init__(self): self.x = 20 def mocked_method(self, param): return not param class TestX(TestCase): def setUp(self) -> N

可以扩展MagicMock类来创建模拟对象并在单元测试中使用它吗

如果我在init函数中没有任何代码,那么扩展该类似乎工作得很好

class MockAPI(MagicMock):

    def __init__(self):
        self.x = 20

    def mocked_method(self, param):
        return not param


class TestX(TestCase):
    def setUp(self) -> None:
        self.mocked_api = MockAPI()

    def test_another_method(self):
        self.assertTrue(True)
但这会引发以下错误:

  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/case.py", line 59, in testPartExecutor
    yield
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/case.py", line 611, in run
    self.setUp()
  File "/Users/user/project/tests/test_protocols.py", line 46, in setUp
    self.mocked_api = MockAPI()
  File "/Users/user/project/tests/test_protocols.py", line 38, in __init__
    self.x = 20
  File "/Users/user/project/venv/lib/python3.7/site-packages/mock/mock.py", line 736, in __setattr__
    elif (self._spec_set and self._mock_methods is not None and
  File "/Users/user/project/venv/lib/python3.7/site-packages/mock/mock.py", line 630, in __getattr__
    elif self._mock_methods is not None:
  File "/Users/user/project/venv/lib/python3.7/site-packages/mock/mock.py", line 629, in __getattr__
    raise AttributeError(name)
AttributeError: _mock_methods

通过添加
super()


你忘了在
\uuuu init\uuuuu
方法中调用
super
。这就解决了问题,谢谢!!!!
class MockAPI(MagicMock):
    def __init__(self):
        super().__init__()
        self.x = 20

    def mocked_method(self, param):
        return not param



class TestX(TestCase):
    def setUp(self) -> None:
        self.mocked_api = MockAPI()

    def test_another_method(self):
        self.assertTrue(True)