2013-02-08 4 views
19

Tôi có một phương pháp:Mockito. Xác minh phương pháp param là một lớp paticular

void putObject(<T extends BaseEntity> param) 

Có một số thử nghiệm nơi tôi thử phương pháp này, nhưng tôi tự hỏi, làm thế nào để xác minh rằng phương pháp được gọi với tham số của lớp học đặc biệt? Cố gắng để làm điều đó theo những cách như vậy:

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

Chỉ hoạt động các biến thể thứ hai với any(), nhưng nó doesn t check class of parameter`. Vì vậy, nếu nó có thể xác minh rằng phương pháp nhận được bất kỳ đối tượng của lớp học cụ thể?

Trả lời

44

Đối sánh người dùng documentationisA().

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

Điều đó sẽ giải quyết được vấn đề của bạn.

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

+2

Xin chào. Tôi muốn sửa mã được liệt kê ở trên. Gọi đúng là: verify (foo) .putObject (isA (SomeClass.class)); – nndru

1

Trên thực tế bạn có thể kiểm tra với ArgumentCaptor.

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

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