Как я могу выполнить модульное тестирование метода, который выполняет модифицированный вызов внутри класса AndroidViewModel? - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу написать модульный тест для метода, который выполняет регистрацию, выполнив вызов дооснащения, и этот метод находится внутри класса AndroidViewModel. Как я могу протестировать этот метод?

public class SignUpViewModel extends AndroidViewModel {
    private final Context context;
    private LoadToast loadToast;

    public SignUpViewModel(@NonNull Application application, Context context) {
        super(application);
        this.context = context;
    }


    public void signUpRequest(final String userName, String userPassword, String userEmail, String firstName, String lastName, String securityQuestion, String securityAnswer) {
        JSONObject jsonObject = new JSONObject();
        JSONObject securityJsonObject = new JSONObject();
        loadToast = new LoadToast(context);
        loadToast.setText("Signing in");
        loadToast.show();
        try {

            jsonObject.put("identifier", userName);
            jsonObject.put("password", userPassword);
            jsonObject.put("email", userEmail);
            jsonObject.put("firstName", firstName);
            jsonObject.put("lastName", lastName);
            securityJsonObject.put("question", securityQuestion);
            securityJsonObject.put("answer", securityAnswer);
            jsonObject.put("securityQuestion",securityJsonObject);

        } catch (JSONException e) {
            e.printStackTrace();
        }

        APIService apiService = RetrofitClient.getAPIService();
        Call<String> signUpResponse = apiService.createUser(jsonObject.toString());
        signUpResponse.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                if (response.message().equals("timeout")) {
                    loadToast.error();
                    Toast.makeText(getApplication(), "Network Connection issues please try again", Toast.LENGTH_LONG).show();
                }
                if (response.code() == 200) {
                    loadToast.success();
                    Toast.makeText(getApplication(), "An activation link has been sent to your email. Follow it to activate your account.", Toast.LENGTH_LONG).show();
                    context.startActivity(new Intent(context, LogInActivity.class));
                } else if (response.code() == 409) {
                    loadToast.error();
                    Toast.makeText(getApplication(), "User With Same UserName already Exists", Toast.LENGTH_LONG).show();
                } else {
                    loadToast.error();
                    Toast.makeText(getApplication(), "Something went wrong please try again", Toast.LENGTH_LONG).show();
                }
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                loadToast.error();
                Toast.makeText(getApplication(), "" + t.getMessage(), Toast.LENGTH_SHORT).show();

            }
        });
    }


}

Мой класс выглядит примерно так, и я хочу проверить метод signUpRequest. Я прочитал несколько уроков, но они не помогают. Итак, как мне написать модульный тест для проверки моих методов?

1 Ответ

0 голосов
/ 14 ноября 2019

В соответствии с подходом чистой архитектуры ваш код ViewModel не должен содержать никакого кода, связанного с Framework. Особенно контекст. Вся эта работа, которую вы делаете с модернизацией, должна быть перенесена в другой слой. Переместите этот код в UseCase или Interactor и используйте шаблон Repository. Эта ссылка может быть полезна: https://proandroiddev.com/how-to-implement-a-clean-architecture-on-android-2e5e8c8e81fe

Хорошая архитектура сделает ваш код тестируемым. Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...