我有一個測試套件(使用鼻子,而不是unittest),並且我想修補一個函數以返回測試類中每個測試的特定值序列。我第一次嘗試,用一個簡單的例子,就是:使用模擬修補功能
@patch('time.clock', MagicMock(side_effects=[1, 2]))
class Tests:
def test_1(self):
assert time.clock() == 1
assert time.clock() == 2
def test_2(self):
assert time.clock() == 1
assert time.clock() == 2
然而,MagicMock實例只創建一次,所以當副作用用完第二次測試失敗。我可以分別修補每個測試方法,但我並不想複製修補程序修飾器(比這個例子中有更多的測試!)另一種方式是我可以創建修補程序設置代碼是這樣的:
class Tests:
def setup(self):
self.old_clock = time.clock
time.clock = MagicMock(side_effects=[1, 2])
def teardown(self):
time.clock = self.old_clock
def test_1(self):
assert time.clock() == 1
assert time.clock() == 2
def test_2(self):
assert time.clock() == 1
assert time.clock() == 2
但是保存和恢復原始函數定義看起來像是Mock應該能夠自動執行的事情。還有另一種做法,我失蹤了嗎?或者,我的最後一個例子是這樣做的最佳方式?
我不知道你在這裏得到什麼。它似乎並沒有涉及到這個問題,而且看起來像是一種複雜的書寫方式'x = [1,2] .__ iter __()。next'。你想說什麼? – aquavitae 2013-05-29 09:59:10
好。你想要一個方法來模擬一個函數的模擬。你現在按順序排列。沒有? x = [「Your first Response」,「Your Second Respo」,「... etc」] .__ iter __()。next 解決問題。 – Nasgar 2013-06-03 06:00:06
我知道如何創建一個迭代器並模擬一個函數。我的問題是,是否有一種簡單的方法來重置每個測試功能的模擬。 – aquavitae 2013-06-03 10:15:12