2014-03-30 67 views
0

這是我的樣本服務類:參數的Mockito的私有方法

class Service { 

    @Inject 
    private TestDao dao; 

    public void method() { 
     //Other logic 
     List<SomeClass> list = new ArrayList<SomeClass>(); 
     privateMethod(list); 
     //Other logic 
    } 

    private void privateMethod(List<SomeClass> list) { 
     dao.save(list); 
    } 
} 

如果我用嘲笑的Mockito道,那我怎麼才能測試呼叫的數量dao.save方法?當我嘗試驗證時,我必須給列表對象。但我沒有看到任何方式來獲得這個對象。

有什麼想法?

+0

隨着Mockito,你可以說,如果方法調用_any_「List」。 –

+0

@Sotirios Delimanolis你能告訴我該怎麼做嗎? – Ani

+0

向我們展示如何設置您的測試,但下面的@fgb有一個選項。 –

回答

2

可以使用anyList()匹配,如果你不關心到底是什麼列出你的方法被調用。例如,如果您想驗證save()方法被調用恰好三次:

verify(dao, times(3)).save(anyList()) 

如果你想進一步斷言什麼名單save()被調用,使用ArgumentCaptor

ArgumentCaptor使用示例:

ArgumentCaptor<List> argument = ArgumentCaptor.forClass(List.class); 
verify(dao, times(3)).save(argument.capture()); 
List secondValue = argument.getAllValues().get(1); // captured value when the method was called the second time 
+0

你能告訴我如何在這種情況下使用ArgumentCaptor。我在這裏使用一個列表。另外,如果privateMethod()被多次調用,那麼驗證值應該是什麼? – Ani

+0

@Ani列表的內容取決於您的應用程序,以及您期望它在測試結束時的樣子。我將編輯答案以包含「ArgumentCaptor」的示例用法 – spinlok

1

電話進行驗證與Matchers.anyList()

verify(dao).save(Matchers.anyList()); 
+0

如果你想避免一些編譯警告,總是有'anyListOf(SomeClass.class)' –