2011-11-16 42 views
2

Mox mocking library允許你對你正在嘲笑的課程具體或不可知。如何模擬Pythonic的方式?

  1. mock = mox.CreateMock(Foo)
  2. mock = mox.CreateMockAnything()

莫克斯文檔建議使用第一種方式(基本上檢查模擬的類型)無論它是可能的。作爲動態語言的Python是類型不可知的。這兩種方法對我來說看起來不一致。

那麼,嘲笑的方法更多是Pythonic?

回答

2

他們是不一樣的。從documentation

某些類不提供公共接口;例如,他們可能會使用__getattribute__動態創建其接口。對於這些 類,您可以使用MockAnything。它不強制執行任何接口,因此您心中所需的任何呼叫都是有效的。它在 相同的記錄 - 重播 - 驗證範例中工作。 不要使用這個,除非你絕對必須!您可以創建一個MockAnything你莫克斯實例的 CreateMockAnything方法,像這樣:

相比之下,使用CreateMock(Foo)創建一個模擬的時候,你當一個未知的方法稱爲例外。

+0

感謝您的回答。 – Alex

+1

@Alex:感謝答案的最佳方式是使用左側的勾號接受它。這會給回答者帶來15個聲望點,並告訴其他讀者,這個答案解決了您的問題/回答了您的問題。 –

+0

對不起,我太早按Enter了。 對我來說,問題在於Mox文檔和Python本身之間的範式不一致。 Python對於方法參數的類型明確地是不可知的。 Mox的文檔表明,鴨子打字是不夠的,只要可能,堅持靜態打字。 您能對此發表評論嗎? – Alex