あめ姫はメモリが少ない

技術関連・お仕事関連ブログ

Volleyで通信エラー時のテストを実施する

Volleyライブラリを使った通信エラー時のテストの書き方

com.android.volley.toolbox.HttpStackを使った、サーバーエラーをレスポンスとして返すクラスを作成

private class HttpStackServerError implements HttpStack {
    @Override
    public HttpResponse performRequest(final Request request, final Map additionalHeaders) 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クラスを作ってもできるらしい。