2017-08-08 3 views
2

JUnit4テストでは、javax.ws.rs.core.Responseを入力パラメータとして使用するユーティリティメソッドをテストしようとしています。メソッドはResponse属性を調べ、応答コードに基づいて何らかのアクションを実行します。私はちょうど私の試験方法で応答を作成し、使用してそれを送信すると:JUintでjavax.ws.rs.core.Responseを作成するにはどうすればよいですか?

Response resp = Response.status(Status.INTERNAL_SERVER_ERROR).entity(respMessage).build(); 
ResponseParser.parseResponse(resp); 

私のユーティリティメソッドは、スロー:

java.lang.IllegalStateException: RESTEASY003290: Entity is not backed by an input stream 
    at org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:231) 
    at org.jboss.resteasy.specimpl.BuiltResponse.readEntity(BuiltResponse.java:218) 

マイutilのクラスは、基本的には次のとおりです。

import javax.ws.rs.core.Response; 
import javax.ws.rs.core.Response.Status.Family; 

public class ResponseParser { 

    public static void parseResponse(Response response) { 
    String errorResp = ""; 
    if (!response.getStatusInfo().getFamily().equals(Family.SUCCESSFUL)) { 
     int errorCode = response.getStatus(); 

     errorResp = response.readEntity(String.class); 

    } 
    } 
} 

どのようにすることができますresteasyによって期待どおりにストリームによって適切にサポートされる応答を作成しますか?私はかなりの類似の質問を検討しましたが、エンドポイントコールのテストや嘲笑を主眼に置いているようでした。私はちょうど私の解析方法をテストしたい。

答えて

2

Mockitoのようないくつかのユニットテストフレームワークでレスポンスをモックします。次に、各応答メソッド呼び出しで何を返すかを宣言したり、メソッドが呼び出されたかどうかを確認したりすることもできます。

+1

モックを実装する方法のコード例については、私の答えを参照してください。 – SteveS

1

@albert_nilが提案したことをやり遂げました。ここに私のテストクラスの関連コードがあります。 MessageParseUtil.parseReportResponse(mockResponse);テストされているユーティリティメソッドです。

@Test 
    public void parse_Report_Response_400_Test() { 
    String respMessage = "400 : Validation error occurred. Invalid Parm: employeeID"; 
    Response mockResponse = buildMockResponse(Status.INTERNAL_SERVER_ERROR, respMessage); 

    try { 
     MessageParseUtil.parseReportResponse(mockResponse); 

     fail("Expected parseReportResponse() to throw error but none thrown."); 

    } catch (RestClientException e) { 
     Assert.assertEquals("Expected to status code to be 400 but was " + e.getStatusCode() + " instead.", 400, e.getStatusCode()); 
     Assert.assertEquals("The error message was missing or not correct.", respMessage, e.getErrorMessage().getErrorMessageList().get(0)); 
    } 
    } 

    private Response buildMockResponse(Status status, String msgEntity) { 
    Response mockResponse = mock(Response.class); 
    Mockito.when(mockResponse.readEntity(String.class)).thenReturn(msgEntity); 
    Mockito.when(mockResponse.getStatus()).thenReturn(status.getStatusCode()); 
    Mockito.when(mockResponse.getStatusInfo()).thenReturn(status); 

    return mockResponse; 
    } 
関連する問題