Я хотел бы написать интеграционный тест для приложения весенней загрузки. Приложение не подключается к репозиториям напрямую. Вся передача данных выполняется через веб-сервисы 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?
Спасибо.