我正在开发一个Android应用程序,其中测试是开发过程的一部分。因此,对于我而言,测试通常是一个新领域,我经常挣扎。我需要有关对用于执行用户登录的方法进行单元测试的建议。由于method为void并实现了回调,因此我假设应该模拟类或某些对象。在我的应用程序中,我使用JUnit,Robolectric和Mockito进行测试。
我能够执行测试以检查带有其参数的方法是否被调用,但是我很好奇(不知道)如何测试onResponse和onErrorResponse回调。我提供了下面的代码。预先感谢。
public void loginUser(String email,String pass){
try {
requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
StringRequest request = new StringRequest(Request.Method.POST, Url+"/checkUser.php", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(response.contains("present")){
Toast.makeText(getActivity(), "Welcome", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
}
else{
Toast.makeText(getActivity(), response, Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getActivity(), "Error", Toast.LENGTH_SHORT).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> parameters = new HashMap<String,String>();
parameters.put("email",email);
parameters.put("password",pass);
return parameters;
}
};
requestQueue.add(request);
}catch (Exception o){Log.w("TAG",o.getMessage());}
}//loginUser
@Test
public void testLoginCall() throws Exception {
loginFragment = Mockito.mock(LoginFragment.class);
doNothing().when(loginFragment).loginUser("email","pass");
loginFragment.loginUser("email","pass");
verify(loginFragment,times(1)).loginUser("email","pass");
}