Как сделать код модульного теста для Android с помощью OkHttp3 Post request? - PullRequest
0 голосов
/ 15 мая 2018

Я реализовал метод postData внутри класса LoginService, как показано ниже -

public class LoginService {


private String responsePost = "";
private String response_status;
private Context context;

String logInResponse;
private String account_token = "";

public LoginService(Context context) {
    this.context = context;
}


public void postData(String url, final String email, String password) {


    MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    Map<String, String> params = new HashMap<String, String>();
    params.put("email", "" + email);
    params.put("password", "" + password);

    JSONObject parameter = new JSONObject(params);
    OkHttpClient client = new OkHttpClient();

    RequestBody body = RequestBody.create(JSON, parameter.toString());
    Request request = new Request.Builder()
            .url(url+"login")
            .post(body)
            .addHeader("content-type", "application/json; charset=utf-8")
            .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {


            responsePost = response.code()+"";
            Log.e("###response_code:", responsePost);

            if(responsePost.equals("200"))
            {

                logInResponse="logged In";

                account_token = response.headers().get("Authorization");

                SharedPreferences.Editor editor = context.getSharedPreferences("Profile_PREF", MODE_PRIVATE).edit();
                editor.putString("account_id", account_token);
                editor.putString("email", email);
                editor.apply();

                Intent intent = new Intent(context, HomeActivity.class);

                context.startActivity(intent);
            }

            else
            {
                ((Activity)context).runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //show the response body
                        Toast.makeText(context,"Incorrent Email or Password", Toast.LENGTH_SHORT).show();
                    }
                });

            }


        }

    });



}

}

Цель этого метода - получить правильный код ответа после размещения электронного письма и пароля внутри тела. если код ответа совпадает, то вход будет успешным, иначе нет. Теперь я написал тестовый класс для тестирования метода postData, как показано ниже -

public class LoginServiceTest {

private String responsePost = "";

@Test
public void postData() throws Exception {

    MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    Map<String, String> params = new HashMap<String, String>();
    params.put("email", "a@a.a");
    params.put("password", "123456");

    JSONObject parameter = new JSONObject(params);
    OkHttpClient client = new OkHttpClient();

    RequestBody body = RequestBody.create(JSON, parameter.toString());
    Request request = new Request.Builder()
            .url("...")
            .post(body)
            .addHeader("content-type", "application/json; charset=utf-8")
            .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {

        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {

            responsePost = response.code()+"";

        }

    });


    assertEquals(responsePost, "200");

}

}

Но когда я запускаю тестовый код, то тест не проходит, показывая следующую ошибку-

org.junit.ComparisonFailure: 
Expected :
Actual   :200
<Click to see difference>

Может ли кто-нибудь помочь мне подсказать, как можно написать тестовый код для проверки правильности кода ответа?

...