1
給定一個函數對一個對象的多次調用(比如子進程調用),是否可以模擬特定的子進程調用?目標是確定一個特定的邏輯案例來操縱單元測試。或者這只是嘲笑(或SDET能力)的限制,我需要將更大的功能分解爲更小的功能,以便它們只包含一個子進程調用,並且每個調用都可以被模擬和單獨測試?Python模擬:如何注入一個對象在函數中的特定點?
給定一個函數對一個對象的多次調用(比如子進程調用),是否可以模擬特定的子進程調用?目標是確定一個特定的邏輯案例來操縱單元測試。或者這只是嘲笑(或SDET能力)的限制,我需要將更大的功能分解爲更小的功能,以便它們只包含一個子進程調用,並且每個調用都可以被模擬和單獨測試?Python模擬:如何注入一個對象在函數中的特定點?
我不知道這是否可能,但你可以使模擬做任何原始的方法會做。
import mock, sys
def bar(n):
print('bar({})'.format(n))
def foo():
bar(1)
bar(2)
bar(3)
class MockBar(mock.MagicMock):
original = staticmethod(bar)
def __call__(self, *args, **kwargs):
if self.call_count == 1:
print('stubbed a call with args {} and kwargs {}'.format(args, kwargs))
else:
MockBar.original(*args, **kwargs)
super(MockBar, self).__call__(*args, **kwargs)
with mock.patch.object(sys.modules[__name__], 'bar', MockBar()):
foo()
正如我剛纔嘲笑的唯一目的在於bar
了第二個電話,出三個電話總的一個例子。所以運行上面的代碼給出了輸出:
bar(1)
stubbed a call with args (2,) and kwargs {}
bar(3)