Тест интеграции Spring Boot с Mock Rest Service проблема ответа на запрос resttemplate - PullRequest
0 голосов
/ 20 марта 2020

Я хотел бы написать интеграционный тест для приложения весенней загрузки. Приложение не подключается к репозиториям напрямую. Вся передача данных выполняется через веб-сервисы RESTful.

Реальный ответ живого веб-сервиса приведен ниже:

{
  "GetInfoAdd": {
    "Header": {
      "Timestamp": "2020-03-20T10:25:51.794+03:00",
      "ErrorCode": {
        "dialect": "Error_200"
      },
      "Description": [
        null
      ],
      "StatusCode": "200",
      "Message": null
    },
    "Body": {
      "id": {
        "value": "A",
        "Name": "B"
      }
    }
  }
}

Я прочитал реальный ответ из файла json для Mock Web Service. Затем я использую его для интеграционного тестирования в своем приложении.

Приложение вызывает службу макета с помощью следующего фрагмента кода:

ResponseEntity<InfoDetails> infoDetailsResponse =
    restTemplate.exchange(infoDetailsPath + infoCode, HttpMethod.GET, httpEntity, infoDetails.class);

Модели и подмодели приведены ниже:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "id"
})
public class Body {

    @JsonProperty("id")
    private Id id;

    @JsonProperty("id")
    public Id getId() {
        return id;
    }

    @JsonProperty("id")
    public void setId(Id id) {
        this.id = id;
    }

}

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "dialect"
})
public class ErrorCode {

    @JsonProperty("dialect")
    private String dialect;

    @JsonProperty("dialect")
    public String getDialect() {
        return dialect;
    }

    @JsonProperty("dialect")
    public void setDialect(String dialect) {
        this.dialect = dialect;
    }

}


@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "Header",
        "Body"
})
public class GetInfoAdd {

    @JsonProperty("Header")
    private Header header;
    @JsonProperty("Body")
    private Body body;

    @JsonProperty("Header")
    public Header getHeader() {
        return header;
    }

    @JsonProperty("Header")
    public void setHeader(Header header) {
        this.header = header;
    }

    @JsonProperty("Body")
    public Body getBody() {
        return body;
    }

    @JsonProperty("Body")
    public void setBody(Body body) {
        this.body = body;
    }

}


@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "Timestamp",
        "ErrorCode",
        "Description",
        "StatusCode",
        "Message"
})
public class Header {

    @JsonProperty("Timestamp")
    private String timestamp;
    @JsonProperty("ErrorCode")
    private ErrorCode errorCode;
    @JsonProperty("Description")
    private List<Object> description = null;
    @JsonProperty("StatusCode")
    private String statusCode;
    @JsonProperty("Message")
    private Object message;

    @JsonProperty("Timestamp")
    public String getTimestamp() {
        return timestamp;
    }

    @JsonProperty("Timestamp")
    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    @JsonProperty("ErrorCode")
    public ErrorCode getErrorCode() {
        return errorCode;
    }

    @JsonProperty("ErrorCode")
    public void setErrorCode(ErrorCode errorCode) {
        this.errorCode = errorCode;
    }

    @JsonProperty("Description")
    public List<Object> getDescription() {
        return description;
    }

    @JsonProperty("Description")
    public void setDescription(List<Object> description) {
        this.description = description;
    }

    @JsonProperty("StatusCode")
    public String getStatusCode() {
        return statusCode;
    }

    @JsonProperty("StatusCode")
    public void setStatusCode(String statusCode) {
        this.statusCode = statusCode;
    }

    @JsonProperty("Message")
    public Object getMessage() {
        return message;
    }

    @JsonProperty("Message")
    public void setMessage(Object message) {
        this.message = message;
    }

}


@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "value",
        "Name"
})
public class Id {

    @JsonProperty("value")
    private String value;
    @JsonProperty("Name")
    private String name;

    @JsonProperty("value")
    public String getValue() {
        return value;
    }

    @JsonProperty("value")
    public void setValue(String value) {
        this.value = value;
    }

    @JsonProperty("Name")
    public String getName() {
        return name;
    }

    @JsonProperty("Name")
    public void setName(String name) {
        this.name = name;
    }

}


@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
        "GetInfoAdd"
})
public class InfoDetails {

    @JsonProperty("GetInfoAdd")
    private GetInfoAdd getInfoAdd;

    @JsonProperty("GetInfoAdd")
    public GetInfoAdd getGetInfoAdd() {
        return getInfoAdd;
    }

    @JsonProperty("GetInfoAdd")
    public void setGetInfoAdd(GetInfoAdd getInfoAdd) {
        this.getInfoAdd = getInfoAdd;
    }

}

После этого ниже приводится служебный вызов от контроллера фиктивной службы:

String infoResponse = infoClientImp.getInfoResponse(infoCode);

Этот вызов возвращает строковое значение, которое уже прочитано из файла json. Затем фиктивная служба возвращает следующее приложение ResponseEntity в приложение вызывающей стороны:

return new ResponseEntity<>(infoResponse , HttpStatus.OK);

Затем в приложении вызывающей стороны я ожидаю, что поля будут правильно сопоставлены для класса infoResponse. Однако, когда я проверяю, значение GetInfoAdd становится нулевым, когда я проверяю с помощью отладчика.

Когда я сопоставляю файл JSON с моделями, используя ObjectMapper, проблем нет. Все поля правильно сопоставлены с моделями. Итак, мои вопросы:

  • В чем может быть проблема здесь?
  • Как правильно отобразить результат моего Json файла с помощью вызова resttemplate в службу mock?
  • Кроме того, правильный ли мой подход к виртуализации службы или что еще я могу сделать для реализации интеграционное тестирование с использованием сервиса mock?

Спасибо.

...