2013-02-08 64 views
19

我有一個方法:Mockito。驗證方法參數去是paticular類

void putObject(<T extends BaseEntity> param) 

有一些測試,我嘲笑這個方法,但我不知道,如何驗證方法調用特定類的參數?試圖做它在這樣的方法:

verify(foo).putObject((SomeClass)anyObject()); 
------ 
verify(foo).putObject(any(SomeClass.class)); 
------ 
ArgumentCaptor<SomeClass> parameter = ArgumentCaptor 
      .forClass(SomeClass.class); 
verify(foo).putObject(parametr); 

僅工作了第二個變體與any(),但它不t check class of parameter`。那麼如果有可能驗證該方法獲得特定類的任何對象?

回答

44

用戶匹配器documentationisA()方法。

public static <T> T isA(java.lang.Class<T> clazz)

,將解決你的問題。

verify(foo).putObject(any(),isA(SomeClass.class));

+2

嗨。我想更正上面列出的代碼。正確調用是:驗證(富).putObject(ISA(SomeClass.class)); – nndru 2017-08-08 11:26:11

1

其實你可以檢查與ArgumentCaptor。

ArgumentCaptor<SomeClass> parameterCaptor = ArgumentCaptor 
      .forClass(SomeClass.class); 
verify(foo).putObject(parameterCaptor.capture()); 

SomeClass instance = parameterCaptor.getValue(); 
// check intance.getX() 
// check instance.getY()