package com.android_textbook.learnjunit.web; import java.io.ByteArrayInputStream; import java.io.IOException; import junit.framework.TestCase; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpUriRequest; import com.android_textbook.learnjunit.web.SimpleDownloadLogic; import com.android_textbook.learnjunit.web.SimpleDownloadLogic.ConnectionFailedExecption; public class SimpleDownloadLogicTest extends TestCase { /** 成功すること確認 */ public void testDownloadUri_success() throws Exception { final String testData = "13524"; HttpClient httpClient; { // モックのHttpClientを作成する final StatusLine statusLine = new MockStatusLine() { @Override public int getStatusCode() { // 成功を表すステータスコードを返す return 200; } }; final HttpEntity entity = new MockHttpEntity() { public java.io.InputStream getContent() throws IOException, IllegalStateException { // 成功としてtestData変数の内容を返す return new ByteArrayInputStream(testData.getBytes()); }; }; final HttpResponse response = new MockHttpResponse() { public StatusLine getStatusLine() { return statusLine; }; @Override public HttpEntity getEntity() { return entity; } }; httpClient = new MockHttpClient() { @Override public HttpResponse execute(HttpUriRequest request) throws IOException, ClientProtocolException { return response; } }; } SimpleDownloadLogic logic = new SimpleDownloadLogic(httpClient); String actual = logic.downloadUri("http://www.cattaka.net/"); assertEquals(testData, actual); } /** HTTPステータスが異常の場合、IOExceptionがスローされることを確認 */ public void testDownloadUri_badStatus() throws Exception { HttpClient httpClient; { // モックのHttpClientを作成する final StatusLine statusLine = new MockStatusLine() { @Override public int getStatusCode() { // ステータスコード異常として404を返す return 404; } }; final HttpResponse response = new MockHttpResponse() { public StatusLine getStatusLine() { return statusLine; }; }; httpClient = new MockHttpClient() { @Override public HttpResponse execute(HttpUriRequest request) throws IOException, ClientProtocolException { return response; } }; } SimpleDownloadLogic logic = new SimpleDownloadLogic(httpClient); try { logic.downloadUri("http://www.cattaka.net/"); fail(); // IOExceptionがスローされなければ失敗 } catch (IOException e) { // 成功 } } /** 接続失敗の場合、ConnectionFailedExecptionがスローされることを確認 */ public void testDownloadUri_ioException() throws Exception { HttpClient httpClient; { // モックのHttpClientを作成する httpClient = new MockHttpClient() { @Override public HttpResponse execute(HttpUriRequest request) throws IOException, ClientProtocolException { // 接続失敗としてIOExceptionをスローする throw new IOException(); } }; } SimpleDownloadLogic logic = new SimpleDownloadLogic(httpClient); try { logic.downloadUri("http://www.cattaka.net/"); fail(); // ConnectionFailedExecptionがスローされなければ失敗 } catch (ConnectionFailedExecption e) { // 成功 } } }