Skip to content

Instantly share code, notes, and snippets.

Last active May 1, 2021 17:52
Show Gist options
  • Save riggaroo/a33e1108cf6c2141e2f0 to your computer and use it in GitHub Desktop.
Save riggaroo/a33e1108cf6c2141e2f0 to your computer and use it in GitHub Desktop.
Mocking API Responses using a Retrofit Client in Android
public class RestServiceMockUtils {
public static String convertStreamToString(InputStream is) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
return sb.toString();
public static String getStringFromFile(Context context, String filePath) throws Exception {
final InputStream stream = context.getResources().getAssets().open(filePath);
String ret = convertStreamToString(stream);
//Make sure you close all streams.
return ret;
public static RetrofitMockClient getClient(Context context, final int httpStatusCode, String reason, String responseFileName) throws Exception {
return new RetrofitMockClient(httpStatusCode, reason, getStringFromFile(context, responseFileName));
"error": {
"code": 401,
"message": "Unauthorized"
public class QuoteOfTheDayServiceTests extends InstrumentationTestCase {
public static final TAG = "QODServiceTest";
public static final String BASE_API_URL = "";
public void testAuthoriseFailsForIncorrectSessionId() throws Exception {
String jsonResponseFileName = "quote_401_unauthorised.json";
int expectedHttpResponse = 401;
String reason = "Unauthorised";
//Create RetrofitMockClient with the expected JSON response and code.
RetrofitMockClient retrofitMockClient = RestServiceMockUtils.getClient(getInstrumentation().getContext(), expectedHttpResponse, reason, jsonResponseFileName);
RestAdapter restAdapter = new RestAdapter.Builder()
.setConverter(new JacksonConverter())
.setErrorHandler(new RetrofitErrorHandler())
RestService restServiceClient = restAdapter.create(RestService.class);
//Run test code - you can test anything you want to here, test the correct response, the way the UI displays for certain mock JSON.
String incorrectApiKey = "incorrectApiKey";
try {
String quote = restServiceClient.getQuoteOfTheDay(incorrectApiKey);"Should have thrown unauthorised exception");
} catch (UnauthorizedException unauthorised) {
Log.d(TAG, "Successfully caught unauthorised exception when incorrect API key was passed");
public class RetrofitMockClient implements Client {
private String jsonResponse;
private int statusCode = 200;
private String reason;
private static final String MIME_TYPE = "application/json";
public RetrofitMockClient(int statusCode, String reason, String jsonResponse) {
this.statusCode = statusCode;
this.reason = reason;
this.jsonResponse = jsonResponse;
public Response execute(Request request) throws IOException {
return createDummyJsonResponse(request.getUrl(), statusCode, reason, jsonResponse);
private Response createDummyJsonResponse(String url, int responseCode, String reason, String json) {
return new Response(url, responseCode, reason, Collections.EMPTY_LIST,
new TypedByteArray(MIME_TYPE, json.getBytes()));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment