Tôi gặp sự cố với việc chế nhạo khách hàng Apache Http. Cố gắng tạo mô hình sau:Tại sao đối tượng giả Mockito của tôi sử dụng thực sự thực hiện
DefaultHttpClient httpClient = Mockito.mock(DefaultHttpClient.class);
Không tạo mô hình đúng. Dòng trên được thực hiện mà không ngoại lệ, nhưng khi tôi cố gắng còn sơ khai một số hành vi:
Mockito.when(httpClient.execute(Mockito.<HttpUriRequest>anyObject())).thenReturn(null);
tôi nhận được một ngoại lệ từ một phương pháp trong AbstractHttpClient:
Exception in thread "main" java.lang.IllegalArgumentException: Request must not be null.
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:572)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
Tại sao cuộc gọi để thực hiện bên trong Mockito. khi được chuyển đến AbstractHttpClient?
Tôi đã tìm ra giải pháp cho vấn đề cụ thể này: sử dụng giao diện HttpClient thay vì cố gắng giả lập lớp con cụ thể. Đây là một giải pháp tốt hơn nhiều trong trường hợp này, nhưng tôi tự hỏi nói chung những gì đang xảy ra ở đây? Tại sao tôi không thể chế nhạo lớp bê tông này đúng với Mockito? Có điều gì đặc biệt về DefaultHttpClient? Có những trường hợp khác mà Mockito không thể giả lập các lớp bê tông?
Tôi đang sử dụng Mockito 1.8.5, Apache httpclient 4.0.3, Apache http lõi 4.1, JDK 1.6.0 trên OSX
Vậy đó, cảm ơn! – auramo