我正在整合mockito與python unittest。我是單元測試新手,但對於單元測試範式來說當然不是新手。我想用mockito來扼殺和嘲笑課程。 我找不到任何有關mockito python-unittest集成和用法的好文檔。集成python mockito與python unittest
mockito是最好的方式嗎?
它有什麼含義?
任何人都可以指導我嗎?
我正在整合mockito與python unittest。我是單元測試新手,但對於單元測試範式來說當然不是新手。我想用mockito來扼殺和嘲笑課程。 我找不到任何有關mockito python-unittest集成和用法的好文檔。集成python mockito與python unittest
mockito是最好的方式嗎?
它有什麼含義?
任何人都可以指導我嗎?
我發現模擬文檔比mockito更容易理解。它現在是標準庫的一部分。
python mockito lilbrary正試圖改造Java mockito庫。因此,對於使用Java和Python的人員同時使其更容易,這是非常有用的。如果你不再使用Java mockito,我就沒有理由走這條路。
可能你的答案是使用模擬,因爲你問「mockito是最好的方式嗎?」
從文檔:http://www.voidspace.org.uk/python/mock/getting-started.html#using-mock
下面的簡單ProductionClass具有更緊密的方法。如果它被一個對象調用,那麼它會調用close對象。
>>> class ProductionClass(object):
... def closer(self, something):
... something.close()
...
因此,爲了測試它,我們需要傳遞一個關閉方法的對象並檢查它是否被正確調用。
>>> real = ProductionClass()
>>> mock = Mock()
>>> real.closer(mock)
>>> mock.close.assert_called_with()
通常你要跟蹤,而不是一個方法的單個調用更多。 mock_calls屬性記錄對模擬的子屬性的所有調用 - 也記錄其子對象。
>>> mock = MagicMock()
>>> mock.method()
<MagicMock name='mock.method()' id='...'>
>>> mock.attribute.method(10, x=53)
<MagicMock name='mock.attribute.method()' id='...'>
>>> mock.mock_calls
[call.method(), call.attribute.method(10, x=53)]
如果你做出mock_calls任何意想不到的方法斷言已經被調用,然後斷言將失敗。這很有用,因爲除了斷言您預期的呼叫已經完成之外,您還在檢查它們是否按正確的順序並且沒有額外的呼叫:
您使用呼叫對象構造列表以便與mock_calls:
>>> expected = [call.method(), call.attribute.method(10, x=53)]
>>> mock.mock_calls == expected
True
設置一個模擬對象的返回值是很輕鬆:
>>> mock = Mock()
>>> mock.return_value = 3
>>> mock()
3
當然,你可以做方法相同在模擬:
>>> mock = Mock()
>>> mock.method.return_value = 3
>>> mock.method()
3
返回值也可以在構造函數中設置:
>>> mock = Mock(return_value=3)
>>> mock()
3
如果你需要一個屬性上的模擬設定,只要做到這一點:
>>> mock = Mock()
>>> mock.x = 3
>>> mock.x
3
是有一個原因,你不想使用[mock](http://www.voidspace.org.uk/python/mock/)庫?它是從Python 3.3(unittest.mock)開始的標準單元測試庫的一部分。 – msvalkon
我正在使用python 2.6&2.7 –
沒關係,你可以'pip install mock'。問題的關鍵在於,由於它已經足夠成熟,可以包含在python 3.3的標準庫中,所以你可能會遇到更少的問題,並且有更多的人來回答你的問題。 – msvalkon