2012-01-19 62 views
3

當描述失敗的驗證時,默認情況下Mockito僅打印發生交互的呼叫站點。像這樣:配置mockito以在驗證錯誤消息中打印實際參數值

Wanted but not invoked: 
    proxyListener.foundTemplateParam(
     "fooBar2", 
     isNull(), 
     isNull() 
    ); 
    -> at  foo.ProxyHandlerTest.testThatImplicitParamsScannedCorrectly(ProxyHandlerTest.java:136) 

    However, there were other interactions with this mock: 
    -> at foo.ProxyHandler.<init>(ProxyHandler.java:99) 
    -> at foo.ProxyHandler.<init>  (ProxyHandler.java:100) 
    -> at foo.ProxyHandler.scanForParamSetters(ProxyHandler.java:222) 
    -> at foo.ProxyHandler.<init>(ProxyHandler.java:102) 
    -> at foo.ProxyHandler.<init>(ProxyHandler.java:104) 

這是有用的信息,但我也想看看哪些參數在那些交互過程中通過。有沒有辦法做到這一點?

P. S.我知道嘲笑withSettings().verboseLogging()。但它太冗長了,打印到標準輸出而不是將此信息添加到斷言錯誤消息。

更新: Mockito 1.9.0不支持自定義異常錯誤消息(我剛剛檢查了它們的源代碼)。

+0

你能用調試器運行你的測試嗎? –

回答

0

最安全的地方是打印參數並返回給定值的答案。

然後,您可以編寫類似:

given(some.callWith(arg1, arg2)).will(printArgsAndReturn("some value")); 

其中printArgsAndReturn("some value")實際上返回您的自定義的答案。

+0

如果您需要針對特定​​方法的參數,這是一個很好的方法。但是如果我想打印所有調用參數而不改變很多代碼,我會用'withSettings()。invocationListeners(...我漂亮的打印機監聽器...)'來模擬''。這就是他們如何做'verboseLogging()'。 –