java - 在 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.
}
};
}
我查看了下面的链接,它们都没有解决我的问题。
在我的情况下,我可以getSomething()
从单元测试中访问该函数,但我无法访问getData()
norgetError()
函数,因为 Volley 似乎在单元测试中不起作用。
所有, getSomething()
, getData()
,getError()
函数都是回调函数,我可以访问该getSomeThing()
函数,但我无法访问getData()
andgetError()
函数。
解决方案
推荐阅读
- jenkins - Jenkins Groovy 脚本中预期的步骤
- c++ - 如何避免将 volatile 用于无锁程序?
- hyperledger-fabric - 在 Hyperledger Fabric 网络中安装 Chaincode 时出错
- javascript - React hooks - 我如何从 useMemo 返回一个 hook 调用
- sql - 根据列中的重复项选择行
- computer-vision - 如何使用英特尔 CVAT 中的数据导出 TFRecord?
- java - 运行 .java 文件并实例化其中包含的类会给我不同的结果
- css - 如何在 CSS 中创建进度步骤
- python - 数据框从不是日期的最近值切片
- python - 是否可以在 pandas DataFrame 中使用格式字符串语法?