Volleyで通信エラー時のテストを実施する
Volleyライブラリを使った通信エラー時のテストの書き方
com.android.volley.toolbox.HttpStackを使った、サーバーエラーをレスポンスとして返すクラスを作成
private class HttpStackServerError implements HttpStack { @Override public HttpResponse performRequest(final Request request, final MapadditionalHeaders) throws IOException, AuthFailureError { try { Thread.sleep(1000); } catch (InterruptedException e) { } HttpResponse response = new BasicHttpResponse(new BasicStatusLine(HttpVersion.HTTP_1_1, 500, "Internal Server Error")); List responseHeaders = getHeaders(); response.setHeaders(responseHeaders.toArray(new Header[responseHeaders.size()])); return response; } } private List getHeaders() { ArrayList headers = new ArrayList (); /** 返したいヘッダの内容を記述 */ return headers; }
これをRequestQueueのコンストラクタのnetworkの部分で渡してあげる
RequestQueue requestQueue = new RequestQueue(new NoCache(), new BasicNetwork(new HttpStackServerError())); StringRequest stringRequest = new StringRequest(Request.Method.GET,url,listener,errorListener); requestQueue.add(stringRequest);
こうすることで、requestQueueがInternal Server Errorで返ってきたと判断し、stringRequestのerrorListenerを通らせることができる。
その他、sleepさせ続けてレスポンスを返させなければタイムアウトのテストになる模様。
参考
Unit testing with Android volley - stackoverflow
はてなにおける Android アプリのソフトウェアテスト - slide share
スライド22枚目、テスト用のNetworkクラスを作ってもできるらしい。