这似乎是使用Mockito和Retrofit最受欢迎的博客.
http://mdswanson.com/blog/2013/12/16/reliable-android-http-testing-with-retrofit-and-mockito.html
不幸的是,它使用了早期版本的Retrofit,并且依赖于Callbacks和RetrofitError,它们已从2.0中断.
你如何使用Retrofit 2.0做到这一点?
P.S.:我正在使用RxJava和改造,所以适用于RxJava的东西会很棒.谢谢!
解决方法
https://github.com/square/retrofit/tree/master/retrofit-mock
我还发现:https://touk.pl/blog/2014/02/26/mock-retrofit-using-dagger-and-mockito/
在这里你会发现这个片段:
Unit Tests
During develop of app,you can send requests the server all time(or
most of time) so it is possible to live without mocked server,it
sucks but is possible. Unfortunately you are not able to write good
tests without the mock. Below there are two unit tests. Actually they
do not test anything but in simple way shows how to mockRetrofit
service usingMockito
andDagger
.
@RunWith(RobolectricTestRunner.class) public class EchoServiceTest { @Inject protected EchoService loginService; @Inject protected Client client; @Before public void setUp() throws Exception { Injector.add(new AndroidModule(),new RestServicesModule(),new RestServicesMockModule(),new TestModule()); Injector.inject(this); } @Test public void shouldReturnOfferInAsyncMode() throws IOException { //given int expectedQuantity = 765; String responseContent = "{" + " \"message\": \"mock message\"," + " \"quantity\": \"" + expectedQuantity + "\"" + "}"; mockResponseWithCodeAndContent(200,responseContent); //when EchoResponse echoResponse = loginService.getMessageAndQuantity("test","test"); //then assertThat(echoResponse.getQuantity()).isEqualTo(expectedQuantity); } @Test public void shouldReturnOfferInAsyncModea() throws IOException { //given int expectedQuantity = 2; String responseContent = "{" + " \"message\": \"mock message\","test"); //then assertThat(echoResponse.getQuantity()).isEqualTo(expectedQuantity); } protected void mockResponseWithCodeAndContent(int httpCode,String content) throws IOException { Response response = createResponseWithCodeAndJson(httpCode,content); when(client.execute(Matchers.anyObject())).thenReturn(response); } private Response createResponseWithCodeAndJson(int responseCode,String json) { return new Response(responseCode,"nothing",Collections.EMPTY_LIST,new TypedByteArray("application/json",json.getBytes())); }
另请阅读:Square retrofit server mock for testing
希望它有所帮助