是否有可能在代碼中告訴給定的對象是否爲Mockito模擬?如何判斷對象是否爲Mockito模擬?
我想這樣做的原因是當它使用模擬時返回一個不同的錯誤信息。這將被用於向其他開發者建議他們應該使用預先準備好的模擬,該模擬已經被設置爲以有用的方式應答呼叫而不是自己創建模擬。
目前我所擁有的最好的是object.getClass().getName().contains("EnhancerByMockitoWithCGLIB")
但這感覺很不好。
是否有可能在代碼中告訴給定的對象是否爲Mockito模擬?如何判斷對象是否爲Mockito模擬?
我想這樣做的原因是當它使用模擬時返回一個不同的錯誤信息。這將被用於向其他開發者建議他們應該使用預先準備好的模擬,該模擬已經被設置爲以有用的方式應答呼叫而不是自己創建模擬。
目前我所擁有的最好的是object.getClass().getName().contains("EnhancerByMockitoWithCGLIB")
但這感覺很不好。
貌似沒有這樣的API(請提出一個問題,是應該的!)幸運(按照以下說明您的評論)沒有在org.mockito.internal.util
包的方法:
import org.mockito.internal.util.MockUtil;
new MockUtil().isMock(obj)
今後Mockito.isMock()
方法可能會添加到公共API,請參閱:Issue 313: Provide isMock outside of org.mockito.internal)。
作爲後續行動,在公衆的Mockito API現在有這個方法:
MockingDetails org.mockito.Mockito.mockingDetails(Object toInspect)
這是@大衛華萊士提出的問題的結果。返回的對象支持方法'isMock()'以及'isSpy()',並可能在以後增強以提供更多模擬相關信息。
繼續從你的回答中,我看了一下[MockUtil的源代碼](https://fisheye2.atlassian.com/browse/mockito/trunk/src/org/mockito/internal/util/MockUtil.java? r = 2020)並直接在私有的'isMockitoMock'方法下有一個公共'isMock'方法,它似乎可以使用。我將在Mockito郵件列表上發帖以檢查自己是否從'org.mockito.internal.util'調用方法是一個好主意。 – mikej 2012-01-27 17:28:37
'org.mockito.internal.util'軟件包的意圖之一是Mockito團隊可以設想在這個軟件包中更新任何新版本。所以如果你使用這個軟件包,你的測試可能會在未來發生。然而,我們不太可能擺脫這種特殊的方法,所以我會說它使用起來相當安全。 – 2012-01-27 18:32:54
@mikej:+1,不知何故,我錯過了那個,謝謝!我刪除了舊的答案,並提出了你的建議,所以它更好的脫穎而出。希望你不介意。 – 2012-01-27 18:33:03