我如何通过其他软件包在Java中实例化内部的公共静态最终课程



我有一个用例,我试图从其他软件包中实例化内部公共静态最终类。我正在尝试这样做,以便可以模拟对单元测试的响应。但是,我们可以使用模拟服务器,但是,我只想将模拟对象用于速度和更受控的测试。这是下面的代码段:

public class Http {
  private final HttpClient client;
  @Inject
  Http(HttpClient client) {
    this.client = client;
  }
  public Http.Response get(Http.Request request) {
    try {
      Http.Response response = this.getResponse(this.client.execute(this.createHttpGet(request)));
      return response;
    } catch (IOException var4) {
      throw new RuntimeException(var4);
    } catch (URISyntaxException var5) {
      throw new RuntimeException(var5);
    }
  }
  private Http.Response getResponse(HttpResponse httpResponse) throws IOException {
    Http.Response response = new Http.Response(httpResponse.getStatusLine().getStatusCode());
    response.setMessageBody(EntityUtils.toString(httpResponse.getEntity()));
    return response;
  }
  public static final class Response {
    private final int statusCode;
    private ImmutableMap<String, String> headers;
    private String message;
    private String messageBody;
    Response(int statusCode) {
      this.statusCode = statusCode;
    }
    public int getStatusCode() {
      return this.statusCode;
    }
    public Map<String, String> getHeaders() {
      return this.headers;
    }
    void setHeaders(Map<String, String> headers) {
      this.headers = ImmutableMap.builder().putAll(headers).build();
    }
    public String getMessage() {
      return this.message;
    }
    void setMessage(String message) {
      this.message = message;
    }
    public String getMessageBody() {
      return this.messageBody;
    }
    void setMessageBody(String messageBody) {
      this.messageBody = messageBody;
    }
    public String toString() {
      return String.format("HttpResponse{statusCode=%d, headers=%s, message='%s', messageBody='%s'}", this.statusCode, this.headers, this.message, this.messageBody);
    }
  }
}

您的 Http.Response构造函数需要公开,才能从另一个软件包实例化。

在这里,由于其可见性是default,因此您只能从同一包装中实例化。

您似乎需要它来进行测试。如果您不想更改可见度,则可以在与Http类同一包中的测试类中创建类,仅用于实例化Responses

最新更新