Ложный родительский класс __init__ метод
Я пытаюсь написать несколько юнит-тестов для класса, который является производным от другого, но у меня есть некоторые трудности с издевательством над методом родительского класса init, что на самом деле невозможно, поэтому я ищу предложение.
Вот пример того, как проходят мои занятия
Imported.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")
В моих юнит-тестах я хочу убедиться, что Parent.parent_list == ["PARENT", "DERIVED"] при создании экземпляра объекта из класса Derived, Derived().
Оба эти решения не работают
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 не работает с
TypeError: __init__() should return None, not 'MagicMock'
test_init_002 не работает с
ImportError: No module named Parent.Imported
Любое предложение?
1 ответ
Решение
Для первого решения измените возвращаемое значение __init__
метод для 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"])
Для второго решения, патч 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"])