2010-08-27 9 views
26

Tôi đang sử dụng mockito để kiểm tra mô-đun đăng nhập JAAS/LDAP kế thừa.Sử dụng Mockito, làm cách nào để chặn đối tượng gọi lại trên phương thức void?

Giao diện javax.security.auth.callback.CallbackHandler xác định chức năng:

void handle(javax.security.auth.callback.Callback[] callbacks) 

Tôi đang mong đợi callbacks chứa một NameCallback, đó là đối tượng mà cần phải được thao tác để vượt qua kỳ thi này.

Có cách nào để giả lập điều này một cách hiệu quả không, hoặc tôi có nên làm tốt hơn với việc triển khai thực hiện của CallbackHandler không?

Trả lời

33

Đối với chức năng quay trở lại void, sử dụng doAnswer()

doAnswer(...).when(mockedObject).handle(any(Callback[].class)); 

Và một Answer mà thực hiện việc đánh chặn phải đi làm tham số để doAnswer, ví dụ như một lớp vô danh:

new Answer() { 
    public Object answer(InvocationOnMock invocation) { 
     Object[] args = invocation.getArguments(); 
     Mock mock = invocation.getMock(); 
     return null; 
    }} 

Trong trường hợp này args sẽ là mảng Callback[]!