android – 使用Mockito和Retrofit 2.0

前端之家收集整理的这篇文章主要介绍了android – 使用Mockito和Retrofit 2.0前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用Mockito为我的api调用(通过Retrofit 2.0制作)创建单元测试.

这似乎是使用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的东西会很棒.谢谢!

解决方法

在Retrofit的官方存储库中有一个有用的例子:
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 mock Retrofit
service using Mockito and Dagger.

@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

希望它有所帮助

原文链接:https://www.f2er.com/android/315099.html

猜你在找的Android相关文章