我是一般使用模擬庫和單元測試的新手。我想我明白模擬庫的工作原理,但我認爲我的方法有問題。使用MagicMock測試方法的內部組件
可以說我有一類Foo
具有方法addFoo(bar1, bar2)
和addFoo
調用foo內的其他「私人」的方法,同時也可以提高在各部位的異常代碼...即
class Foo:
def __init__(self):
# This creates lots of dependencies
def _inner1(self, bar):
if this_doesnt_work:
return None
return modified_bar1
def _inner2(self, bar2):
if this_doesnt_work:
return None
return modified_bar2
def addFoo(bar1, bar2):
if self._inner1(bar1) and self._inner2(bar2):
#do something
else:
raise SomeException
當我單元測試,我目前所做的是在我的單元測試設置中剔除Foo.__init__
,並將return_value
設置爲無。這可以運行,並允許我在沒有所有外部依賴的情況下對類中的方法運行測試,並使用我的模擬Foo.__init__
實例模擬任何類屬性。
之後,如果我想進行單元測試addFoo
我會做以下(跳過一堆的步驟)完成:
@patch.object(Foo, '_inner2')
@patch.object(Foo, '_inner1')
def test_inner1_exception(self, mock_inner1, mock_inner2):
mock_inner1.side_effect = Exception
# then do some asserts to make sure it worked
問題 如何測試一個例外addFoo
如果代碼看起來是這樣的:
def addFoo(bar1, bar2):
bars = self._getBars() #something that returns a list
my_modified_bar_list = []
for bar in bars:
my_modified_bar_list.append(self._inner1(bar))
if len(my_modified_bar_list) == 0:
raise SomeException
在這種情況下如何測試SomeException
當它是依賴於通過我的方法中的一些陣列產生的值?