首页 > 解决方案 > 在 Android 中使用 Volley 进行网络单元测试

问题描述

我正在尝试从我的 Presenter 类中测试功能。在下面,我可以getSomeThing()使用功能,但是我无法使用getData()andgetError()功能。

Volley 函数在单元测试中不起作用。进一步的帮助将不胜感激,因为我为此苦苦挣扎了一个多星期。

下面是我的 Presenter Class、Presenter Listener 和 Test Function。

我的演示者类:

public abstract class SomePresenter implements BasePresenterListener {

    private static final String sTAG = SomePresenter.class.getSimpleName();

    private Context context;
    private Integer testInteger;

    protected SomePresenter(Context context, Integer testInteger) {
        this.context = context;
        this.testInteger = testInteger;
        onResponse();
    }

    @Override
    public void onResponse() {
        try {
            Thread.sleep(1000);
            getSomeThing();

        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        final GetRequest<SomeResponse> someResponseRequest =
                ApiRequests.getSomeResponse(
                        new Response.Listener<SomeResponse>() {
                            @Override
                            public void onResponse(SomeResponse response) {
                                getData(response);
                            }
                        }
                        ,
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                ErrorResponse errorResponse = new ErrorResponse();
                                errorResponse.setMessage(Constant.NETWORK_ERROR);
                                getError(errorResponse);
                            }
                        }
                );

        NetworkInstance.addRequest(context, poiResponseGetRequest, sTAG);
    }

    public static void cancelRequest(Context context) {
        NetworkInstance.cancelAllRequests(context, sTAG);
    }

    protected abstract void getSomeThing();

    protected abstract void getData(SomeResponse response);

    protected abstract void getError(ErrorResponse response);
}

我的 BasePresenter 类:

public interface BasePresenterListener {
    void onResponse();
}

我的单元测试功能:

    @Test
    public void test() throws InterruptedException {
        new SomePresenter(mockContext, 107){

            @Override
            protected void getData(PoiResponse response) {
                SomeLogger.debug("getData works");//this is not called.
            }

            @Override
            protected void getSomeThing() {
                SomeLogger.debug("getSomeThing works!");//this is called.
            }

            @Override
            protected void getError(ErrorResponse response) {
                SomeLogger.debug("ErrorResponse works!"); //this is not called.
            }
        };
    }

我查看了下面的链接,它们都没有解决我的问题。

单元测试网络响应。在调试时工作,而不是在实际运行时工作

使用 Volley 进行 Android 单元测试

在我的情况下,我可以getSomething()从单元测试中访问该函数,但我无法访问getData()norgetError()函数,因为 Volley 似乎在单元测试中不起作用。

所有, getSomething(), getData(),getError()函数都是回调函数,我可以访问该getSomeThing()函数,但我无法访问getData()andgetError()函数。

标签: javaandroidunit-testingjunitandroid-volley

解决方案


推荐阅读