Sự cố khi sử dụng RETURN_DEEP_STUBS là bạn sẽ nhận được một mô hình khác mỗi lần bạn gọi một phương thức. Tôi nghĩ từ câu hỏi của bạn rằng bạn muốn sử dụng Câu trả lời mặc định thực sự trả về mô hình mà nó được gọi, cho mỗi phương thức có kiểu trả về đúng. Điều này có thể trông giống như sau. Lưu ý rằng tôi đã không thử nghiệm này, vì vậy nó có thể chứa lỗi chính tả, nhưng tôi hy vọng rằng ý định rõ ràng trong mọi trường hợp.
import static org.mockito.Mockito.RETURNS_DEFAULTS;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
public class SelfReturningAnswer implements Answer<Object>{
public Object answer(InvocationOnMock invocation) throws Throwable {
Object mock = invocation.getMock();
if(invocation.getMethod().getReturnType().isInstance(mock)){
return mock;
}
else{
return RETURNS_DEFAULTS.answer(invocation);
}
}
}
Sau đó, khi bạn tạo mô hình, hãy chỉ định đây làm câu trả lời mặc định của bạn. Điều này sẽ làm cho giả của bạn trở lại chính nó từ mỗi phương pháp mà nó có thể; nhưng nó sẽ hoạt động như một mô hình thông thường khi bạn gọi một phương thức có kiểu trả về là sai đối với mô hình.
Tạo mô hình của bạn như thế này
Builder mockBuilder = mock(Builder.class, new SelfReturningAnswer());
hoặc tạo một hằng số cho lớp này và viết một cái gì đó giống như
@Mock(answer = SELF_RETURNING) private Builder mockBuilder;
Hy vọng rằng sẽ giúp.
Nguồn
2011-12-16 05:32:19
Bạn có thực sự cần chế bản này không? Nó không giống như loại phụ thuộc đáng để chế giễu. Nó giống như một loại "dữ liệu" của lớp, chứ không phải là một loại "dịch vụ" của lớp. Tôi hiếm khi tìm thấy nó hữu ích để làm cho các lớp học mà không có nhiều hành vi thực tế. –
Nó chỉ là một ví dụ, người xây dựng thực sự là một chút phức tạp hơn và nó chỉ không cần phải kiểm tra trong trường hợp này. –
Bạn có thể tách chúng để bạn * có * có một "người xây dựng câm" (không cần chế nhạo) và sau đó phần dịch vụ * có * cần chế nhạo? –