8
我想寫一些unittests從另一個派生類,但我有一些困難,嘲笑父類初始方法,這afaik你不能,所以我在尋找建議。模擬父類__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")
在我的單元測試我想驗證當我從派生類Derived()實例化一個對象時,Parent.parent_list == [「PARENT」,「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
任何小號uggestion?
爲什麼究竟init__'需要'父.__被嘲笑?爲什麼不只是嘲笑'進口'? –
你的第二個測試需要模擬'Parent.Imported'。 –
最後但並非最不重要的一點是,您修改了'Parent.parent_list' *到位*,因此'Parent.parent_list'和'Derived.parent_list'都指向同一個對象。所以'Parent.parent_list'現在包含'「DERIVED」'。您可能想要爲「派生」創建一個副本:'parent_list = Parent.parent_list + [「DERIVED」]'。你的測試可能要檢查這個。 –