I have an Activity for registration.The Activity takes user's profile like email and password and then upload those values to the server.The server will return those values to Activity after success,for Activity to save them to SharedPreferences.
My question is,how to write a test that return a fake response so that the Activity doesn't have to interact with the real server,and check if the values have been saved exactly to the preference?
This is my Activity:
public class RegisterActivity extends AppCompatActivity implements RegisterRestClientUsage.RegisterCallback{
private RegisterRestClientUsage registerRestClientUsage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
registerRestClientUsage = new RegisterRestClientUsage(this);
//...
}
public void onClick(View view){
String email = emailEditText.getText().toString();
String password = passwordEditText.getText().toString();
registerRestClientUsage.registerToServer(email,password);
}
@Override
public void registerSuccess(String token, String email) {
//Save those values to SharedPreferences
finish();
}
@Override
public void registerFail() {
finish();
}
}
RegisterClientUsage.class
public class RegisterRestClientUsage {
private RegisterCallback callback;
public interface RegisterCallback{
void registerSuccess(String token,String email);
void registerFail();
}
public RegisterRestClientUsage(RegisterCallback r){
callback = r;
}
public void registerToServer(String email,String password){
RequestParams params = new RequestParams();
params.put("email", email);
params.put("password", password);
BaseRestClient.post("api/users/sign_up", params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
try {
JSONObject responseJson = new JSONObject(new String(responseBody));
returnToken = responseJson.optString("token");
JSONObject userJson = responseJson.optJSONObject("user");
returnEmail = userJson.optString("email");
callback.registerSuccess(returnToken,returnEmail);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
callback.registerFail();
}
});
}
}
BaseRestClient.class
public class BaseRestClient {
public static final String BASE_URL = "https://my.api.com/";
private static AsyncHttpClient client = new AsyncHttpClient();
public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
client.post(getAbsoluteUrl(url), params, responseHandler);
}
}
Since the RegisterRestClientUsage is embedded in RegisterActivity,I can't find a good way to inject my fake server into the Activity.