如何对在AndroidViewModel类内部进行改造调用的方法进行单元测试?

我想为一个通过改造调用执行signUp的方法编写一个单元测试,该方法位于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方法。我阅读了一些教程,但没有帮助。那么,如何编写单元测试来测试我的方法呢?

urboat20 回答:如何对在AndroidViewModel类内部进行改造调用的方法进行单元测试?

根据Clean体系结构方法,您的ViewModel代码不必包含任何与Framework相关的代码。特别是上下文。您所做的所有这些工作都必须移到另一层。在UseCase或Interactor中移动此代码,并使用存储库模式。该链接可能会有所帮助:https://proandroiddev.com/how-to-implement-a-clean-architecture-on-android-2e5e8c8e81fe

良好的体系结构将使您的代码可测试。 希望对您有所帮助:)

本文链接:https://www.f2er.com/3166403.html

大家都在问