При выполнении интеграционных тестов для приложения Spring Boot с RestTemplate, почему все возвращаемые значения устанавJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 При выполнении интеграционных тестов для приложения Spring Boot с RestTemplate, почему все возвращаемые значения устанав

Сообщение Anonymous »

У меня есть API Springboot, который включает в себя платеж в классе моделей , @service класс платежный сервис , а также репозиторий JPA, контроллер и некоторые классы утилиты. У меня есть интеграционные тесты, которые в основном работают с использованием JUNIT, H2 In-Memory DB и RESTTEMPLATE . Когда я запускаю тест, например, создаю новый платеж, класс @Service работает, делает бизнес-логику, сохраняет новый объект в базе данных в памяти, устанавливает еще несколько полей, а затем возвращает созданный объект.

Код: Выделить всё

@Test
@Sql(statements="delete from payment_line_items", executionPhase=Sql.ExecutionPhase.AFTER_TEST_METHOD)
@Sql(statements="delete from payment", executionPhase=Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void testCreateBasicPayment() throws Exception {
Payment payment = ModelTestingToolbox.generatePayment();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "token");
HttpEntity
 entity = new HttpEntity(payment, headers);
ResponseEntity response = restTemplate.postForEntity(baseUrl, entity, Payment.class);
assert response.getStatusCode().is2xxSuccessful();
Payment created = response.getBody();

// these assertions pass, but amount and currency code are set in the POSTed object
assert created.getCardInfo() == null;
assert created.getAmount().compareTo(payment.getAmount()) == 0;
assert created.getCurrencyCode().equals(payment.getCurrencyCode());

// these assertions fail, and the fields are either autogenerated or set in the service
assert created.getId() != null;
assert created.getTransId() != null;
}
< /code>
Соответствующие биты платежа: < /p>
@Entity @Table(name="payment")
@JsonInclude(Include.NON_NULL)
@Data
@FieldDefaults(level=AccessLevel.PRIVATE)
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class Payment {

@Id
@GeneratedValue
@JsonProperty(access=Access.READ_ONLY)
UUID id;

@JsonProperty(access=Access.READ_ONLY)
String transId;

@NotNull
@JsonSerialize(using=BigDecimalSerializer.class)
BigDecimal amount;

@NotNull
String currencyCode;

...

}
Я могу проверить, что код в классе @service работает (через операторы печати и другие способы, связанные с конкретной бизнес -логикой). Тем не менее, возвращаемый объект из resttemplate.postforentity () отсутствует некоторые поля, а именно все те, которые установлены полями @Service и @GeneratedValue . Все работает, как и ожидалось при запуске ручных тестов, используя Curl. Как я могу получить правильный объект, который будет возвращен из Resttemplate.postforentity () ?


Подробнее здесь: https://stackoverflow.com/questions/796 ... te-why-are
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»