2016-10-28 6 views
0

私は2つのクラスを持っています。最初のServiceConsumerは、そのコンストラクタのサーバ設定を初期化する抽象クラスです。これは、RESTサービスを使用するメソッドを保護しています。Java:ユニットの使い方RESTサービスを使用する抽象クラスをテストしてください

public abstract class ServiceConsumer { 

public ServiceConsumer(String configFilePath) { 
    initConfigSuccessful = false; 
    initConfiguration(configFilePath); 
} 

protected RestResponse executeGetRequest(String urlString) { 
    if (!initConfigSuccessful) { 
     return RestResponseFactory.createErrorResponse("Initialization error!"); 
    } 

    try { 
     HttpClient httpClient = HttpClientBuilder.create().build(); 
     HttpGet getRequest = new HttpGet(urlString); 
     byte[] authentication = Base64.getEncoder().encode((username + ":" + password).getBytes()); 
     getRequest.setHeader("Authorization", "Basic " + new String(authentication)); 

     HttpResponse response = httpClient.execute(getRequest); 
     HttpEntity entity = response.getEntity(); 
     InputStream responseStream = entity.getContent(); 
     String responseString = StringHelper.getFileContent(responseStream); 
     JsonElement responseElement = new JsonParser().parse(responseString); 
     int responseCode = response.getStatusLine().getStatusCode(); 

     if (responseElement == null || responseElement.isJsonNull()) { 
      return RestResponseFactory.createResponse(responseCode); 
     } else if (responseElement.isJsonObject()) { 
      return RestResponseFactory.createResponse(responseCode, responseElement.getAsJsonObject()); 
     } else if (responseElement.isJsonArray()) { 
      return RestResponseFactory.createResponse(responseCode, responseElement.getAsJsonArray()); 
     } 
    } catch (Exception e) { 
     return RestResponseFactory.createErrorResponse(e); 
    } 
    return RestResponseFactory.createErrorResponse("Unexpected error occured!"); 
    } 
} 

第二のクラスServiceClientServiceConsumerを拡張し、方法スーパーコンストラクタとメソッドを呼び出します。

public class ServiceClient extends ServiceConsumer { 

private static String configFilePath = "/server-config.json"; 

public ServiceClient() { 
    super(getConfigFilePath()); 
} 

public RestResponse getStuffByKey(String key) { 
    RestResponse restResponse = executeGetRequest(getBasicUrl() + "/rest/api/2/stuff/" + key); 
    return restResponse; 
    } 
} 

私はユニットテストの方法をMockitoで理解できません。どんな助けもありがとうございます。

+0

どのような操作をテストしたいですか? – maxpovver

+0

getStuffByKeyおよび/またはexecuteGetRequestメソッド。 – SpaceJump

答えて

2

相続財産を超える相続が答えです。 ServiceConsumerは呼び出される機能を提供しています。しかし、その機能が基本クラスにある理由はありません。これを自分のクラスに移動し、インターフェイスでその機能を抽象化し、ServiceClientがそのインターフェイスに依存するようにします。

あなたのコードには、クラス設計の明確な警告徴候が表示されています。派生クラスは、基本クラスの抽象保護されていないメソッドを呼び出しています。

+0

あなたの答えをありがとう、私は理解しているか分からない。あなたは私が何をしなければならないか少し具体的にすることができますか? – SpaceJump

関連する問題