0

MockWebServer[37929] received request: POST /users/sign_in HTTP/1.1 and responded: HTTP/1.1 500 Server Error

I am trying to mock retrofit api call with below code but method onResponse method never called.

       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---------------------------");
                    }

                });

Adding implementation unit test class.But i am getting always MockWebServer[48913] received request: POST /users/sign_in HTTP/1.1 and responded: HTTP/1.1 500 Server Error.

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());
            }
        });

    }
}
nishant p
  • 11
  • 3

1 Answers1

0

I think you are not doing it correctly. And it not very clear what is RESTMockServerStarter from your code. I would suggest you go through these links to unit test / mock web server

  1. How to unit test Retrofit api calls?
  2. https://medium.com/@hanru.yeh/unit-test-retrofit-and-mockwebserver-a3e4e81fd2a2
anshul
  • 982
  • 1
  • 11
  • 33