我有一个需要测试的函数,它在okHttp回调中运行。我尝试使用Robolectrics进行测试,但是回调从未执行。我推测这是因为测试在请求后立即移动而没有等待okHttp返回。到目前为止,我已经尝试了以下方法:
ShadowLooper.pauseMainLooper();
Robolectric.flushBackgroundScheduler();
ShadowLooper.unPauseMainLooper();
但是那并没有起作用。有什么建议吗?
编辑:
以下是我的代码示例:
ApiClient.sendSomeDataToServer(data, callback);
ApiClient是一个包含okHttp客户端的辅助类。sendSomeDataToServer API调用看起来像这样:
public static void sendSomeDataToServer(MyObject data, Callback callback){
final Request request = new Request.Builder()
.url(API_SOME_URL)
.post(RequestBody.create(JSON, myObject.getAsJson().toString()))
.build();
sHttpClient.newCall(request).enqueue(callback);
}
这里的sHttpClient是一个已初始化的OkHttpClient。
我可以通过在测试代码中强制使用Thread.sleep(5000)
并提供自定义回调来测试上述执行。我要测试的代码位于回调函数内部。有什么建议吗?我真的不想改动主要代码以适应测试框架 - 应该反过来。