我有一個Python TestCase
類,除了一個之外,所有的測試方法都需要以同樣的方式修補一個對象。另一種方法需要來自同一個對象的其他行爲。我正在使用mock,所以我做了:覆蓋Python模擬的修補程序修飾器
@mock.patch('method_to_patch', mock.Mock(return_value=1))
class Tests(TestCase):
@mock.patch('method_to_patch', mock.Mock(return_value=2))
def test_override(self):
(....)
但是,這不起作用。當運行test_override
時,它仍會調用類裝飾器的修補行爲。
大量的調試後,我發現了TestSuite
生成過程中,各地test_override
的@patch
被一個圍繞Tests
之前調用,因爲mock
應用補丁的順序,類裝飾壓倒一切的方法裝飾。
此命令是否正確?我期待着相反的,我不知道如何覆蓋修補...也許與with
聲明?
'test_override'是否需要在'Tests'中?我可以想象有另一個'TestCase'用於'test_override'和類似的測試。如果你希望所有'method_to_patch'對'test_override'做一件事情,而不是另一件事情,那麼我也可以想象擁有另一個'TestCase'類是合理的。這也可以解決你的問題,並且使代碼更易於被其他開發者讀取(與「修補修補」相比)。 –
@SimeonVisser由於我們用來構造測試的規則,將'test_override'移動到另一個類並不是一個真正的選擇。它們都是相對於同一個視圖的測試,所以我們把'em'放在一個'TestCase'中 – Gabe