我有下面的方法,它会执行GET请求3次直到成功为止。
如何更好地模拟这个方法?我想模拟和测试状态码401、状态码500,并测试该方法是否执行了三次。
在Python中,我们有https://github.com/getsentry/responses ,它直接模拟请求,因此很容易测试这些方法。
在Java中有类似的东西吗?
@Override
public <T> UResponse<T> get(Request request, JSONUnmarshaler<T> unmarshaller, Gson gson) throws UException {
int status_code = 0;
String next = null;
String rawJSON = null;
JsonElement jsonelement = null;
Boolean retry = true;
try {
int attempts = 3;
while ((attempts >= 0) && (retry) && status_code != 200){
Response response = this.client.newCall(request).execute();
rawJSON = response.body().string();
jsonelement = gson.fromJson(rawJSON, JsonElement.class);
next = gson.fromJson(jsonelement.getAsJsonObject().get("next"), String.class);
status_code = response.code();
if (status_code == 401) {
try {
logger.warn("token expired");
TimeUnit.SECONDS.sleep(5);
retry = true;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if ((status_code / 100 ) == 5){
logger.warn("gateway error");
retry = true;
}
attempts -= 1;
retry = false;
}
if (status_code != 200){
throw new UException();
}
return new UResponse<T>(status_code, next, rawJSON,
unmarshaller.fromJSON(gson, jsonelement.getAsJsonObject()));
} catch (IOException e) {
e.printStackTrace();
throw new UException();
}
client.newCall(request).execute()
调用,以返回预期的响应并检查调用次数。或者更简单的方法是使用okhttp-client-mock(MIT),设置你的规则为3次,并检查它是否被消耗。 - Morfic