[英]How can I do unit testing of a method which is making retrofit call inside of AndroidViewModel class?
我想通过调用 retrofit 为执行注册的方法编写单元测试,并且该方法位于 AndroidViewModel class 内部。我该如何测试此方法?
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();
}
});
}
}
我的 class 看起来像这样,我想测试signUpRequest
方法。 我阅读了一些教程,但它们没有帮助。 那么,我该如何编写单元测试来测试我的方法呢?
根据清洁架构方法,您的 ViewModel 代码必须不包含任何与框架相关的代码。 尤其是上下文。 您对 retrofit 所做的所有这些工作都必须移到另一层。 在 UseCase 或 Interactor 中移动此代码并使用 Repository 模式。 此链接可能会有所帮助: https://proandroiddev.com/how-to-implement-a-clean-architecture-on-android-2e5e8c8e81fe
良好的架构将使您的代码可测试。 希望它会有所帮助:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.