Mock clase padre __init__ método

Estoy tratando de escribir algunas pruebas de unidad en una clase que se deriva de otra, pero tengo algunas dificultades para burlarme del método de inicio de clase padre, que afaik no se puede, así que estoy buscando una sugerencia.

Aquí un ejemplo de cómo son mis clases.

Importado.py

class Imported(): def __init__(self, a="I am Imported"): print("a:{}".format(a)) 

Parent.py

 from Imported import Imported class Parent(object): parent_list = ["PARENT"] def __init__(self, a="I am Parent"): imported = Imported(a) 

Derived.py

 from Parent import Parent class Derived(Parent): Parent.parent_list.append("DERIVED") 

En mis pruebas de unidad, quiero verificar que Parent.parent_list == [“PARENT”, “DERIVED”] cuando ejemplifique un objeto de la clase Derived, Derived ().

Ambas soluciones no funcionan

test_Derived.py

 import unittest from mock import patch from Derived import Derived class test_Derived(unittest.TestCase): @patch("Derived.Parent.__init__") def test_init_001(self, mock_parent_init): a = Derived("I am Derived") mock_parent_init.assert_called_with("I am Derived") self.assertEquals(a.parent_list, ["PARENT", "DERIVED"]) @patch("Derived.Imported.Imported") def test_init_002(self, mock_parent_init): a = Derived("I am Derived") mock_parent_init.assert_called_with("I am Derived") self.assertEquals(a.parent_list, ["PARENT", "DERIVED"]) 

test_init_001 falla con

 TypeError: __init__() should return None, not 'MagicMock' 

test_init_002 falla con

 ImportError: No module named Parent.Imported 

¿Cualquier sugerencia?

Para la primera solución, cambie el valor de __init__ método __init__ a None .

 @patch("Derived.Parent.__init__") def test_init_001(self, mock_parent_init): mock_parent_init.return_value = None # <--- a = Derived("I am Derived") mock_parent_init.assert_called_with("I am Derived") self.assertEquals(a.parent_list, ["PARENT", "DERIVED"]) 

Para la segunda solución, parche Parent.Imported :

 @patch("Parent.Imported") # <--- def test_init_002(self, mock_parent_init): a = Derived("I am Derived") mock_parent_init.assert_called_with("I am Derived") self.assertEquals(a.parent_list, ["PARENT", "DERIVED"])