android - Restmock 服务器总是返回 500
问题描述
MockWebServer[37929] 收到请求:POST /users/sign_in HTTP/1.1 并响应:HTTP/1.1 500 服务器错误
我正在尝试使用以下代码模拟改造 api 调用,但从未调用方法 onResponse 方法。
public static Retrofit getClient() {
RESTMockServerStarter.startSync(new JVMFileParser());
RESTMockServer.whenPOST(pathContains("sign_in")).thenReturnFile(200, "login_v1.json");
//Creating a retrofit object
retrofit = new Retrofit.Builder()
.baseUrl(RESTMockServer.getUrl())
.addConverterFactory(GsonConverterFactory.create())
.client(getOkHttpClient())
.build();
return retrofit;
}
call.enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
try {
if (response != null && response.isSuccessful()) {
if (response.body() != null) {
JsonObject jsonResponse = response.body().getAsJsonObject();
if (jsonResponse.get(ApiConstants.STATUS).isJsonPrimitive() && jsonResponse.get(ApiConstants.STATUS).getAsJsonPrimitive().isNumber()) {
// Api call handling as per the status
}
}
} else {
System.out.println("Fail---------------------------");
}
} catch (Exception e) {
System.out.println("Fail---------------------------");
}
}
@Override
public void onFailure(Call<JsonElement> call, Throwable t) {
//Show message to user for api failure
System.out.println("Fail---------------------------");
}
});
添加实现单元测试类。但我总是收到 MockWebServer[48913] 请求:POST /users/sign_in HTTP/1.1 并响应:HTTP/1.1 500 服务器错误。
package com.example;
import android.os.Build;
import com.example.webclient.ApiInterfaces;
import com.google.gson.JsonElement;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import io.appflate.restmock.JVMFileParser;
import io.appflate.restmock.RESTMockServer;
import io.appflate.restmock.RESTMockServerStarter;
import okhttp3.OkHttpClient;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import static io.appflate.restmock.utils.RequestMatchers.pathEndsWith;
@RunWith(RobolectricTestRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class stubtest {
private static final String PATH_ANDRZEJCHM_PROFILE = "src/test/resources/__files/city_v1.json";
@Test
@Config(sdk = Build.VERSION_CODES.O_MR1)
public void exampleTest() {
RESTMockServerStarter.startSync(new JVMFileParser());
RESTMockServer.whenGET(pathEndsWith("/available_city_master")).thenReturnFile(PATH_ANDRZEJCHM_PROFILE);
Retrofit retrofit;
OkHttpClient client = new OkHttpClient();
retrofit = new Retrofit.Builder()
.baseUrl(RESTMockServer.getUrl())
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
ApiInterfaces service = retrofit.create(ApiInterfaces.class);
Call<JsonElement> call = service.getCity("surat", 1);
call.enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(Call<JsonElement> call, Response<JsonElement> response) {
System.out.println("request" + response.body());
}
@Override
public void onFailure(Call<JsonElement> call, Throwable t) {
System.out.println("request" + t.getMessage());
}
});
}
}
解决方案
我认为您没有正确执行此操作。而且从您的代码中不太清楚RESTMockServerStarter 是什么。我建议您通过这些链接到单元测试/模拟 Web 服务器
推荐阅读
- laravel - 在 eloquent 查询中检索特定值
- javascript - 选择具有动态设置 data-x 属性的元素
- css - 代码沙箱和本地反应的行为不同
- react-native - 使用 React Native Webview 在 iOS 上的键盘重叠输入
- python - 计算传感器每天处于特定状态的时间量
- mongodb - 如何从猫鼬中的填充中过滤文档
- docusignapi - 无法建立 SSL 连接,请参阅内部异常。- DocuSign EnvelopesApi 仅调用 PROD 环境
- python - 代理不连接,返回 httpsconnection 错误
- c# - 当主显示器缩放 > 100% 时,GetMonitorInfo 为辅助显示器返回错误的窗口大小
- r - R bigrquery 在写作中丢失小数