2011-07-31 47 views
2

通緝,但不調用:然而,有這個模擬等互動:通緝,但不調用:然而,有這個模擬等互動:

這是一個的Mockito錯誤嘗試驗證的時候,你會趕上在具體方法上調用某個對象,但是發生了什麼是您與該對象的其他方法進行了交互但未提及的方法。 如果你有一個名爲CustomerService的對象,並說它有兩個名爲saveCustomer()和verifyExistingCustomer()的方法, ,你的mockito看起來像是verify(customerService,atleast(1))verifyExistingCustomer(customer),但是在你的實際服務你至少調用了saveCustomer()至少一個。

任何想法如何解決這個問題?

回答

4

從你所描述的,看起來你是在告訴你的嘲笑,你期望verifyExistingCustomer()被調用,但你實際上沒有調用它。

你應該看看你的測試設計,特別是確保你可以(通過嘲諷)隔離你的測試來單獨測試每種方法。

如果您的代碼中有某些內容決定是調用saveCustomer()還是verifyExistingCustomer(),那麼您應該嘗試模擬代碼檢查的數據,以便您可以單獨測試每個數據。

例如,如果你的代碼是這樣的:

if (customer.getId() == 0) { 
saveCustomer(customer); 
} else { 
verifyExistingCustomer(customer); 
} 

那麼你可以有兩個獨立的測試,你可以通過設置在客戶ID的零值和非零值隔離。

如果你想分享你的代碼,我可以給你一個更好的例子。

+0

如果是這樣的話,我期待投票表示「接受」。或者至少來自@Jigs的評論。 – walters

+0

哇。有時候,我發誓我懷念那些最愚蠢的事情,這就是爲我節省時間的答案。 :-D謝謝! – MackProgramsAlot

相關問題