首页 > 解决方案 > 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());
            }
        });

    }
}

标签: androidapiretrofitretrofit2

解决方案


我认为您没有正确执行此操作。而且从您的代码中不太清楚RESTMockServerStarter 是什么。我建议您通过这些链接到单元测试/模拟 Web 服务器

  1. 如何对 Retrofit api 调用进行单元测试?
  2. https://medium.com/@hanru.yeh/unit-test-retrofit-and-mockwebserver-a3e4e81fd2a2

推荐阅读