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

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

Сообщение Anonymous »

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

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

@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
@FieldDefaults(level=AccessLevel.PRIVATE)
public class PaymentControllerCreateTest {

@LocalServerPort
int port;

String baseUrl = "http://localhost";

static RestTemplate restTemplate = null;

@BeforeAll
public static void init() {
restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
}

@BeforeEach
public void setup() {
baseUrl += ":" + port + "/payment";
}

@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 {
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 class:

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

@Service
@NoArgsConstructor
public class PaymentService {

@Autowired
PaymentRepository repository;

public Payment createPayment(Payment payment) {
// do business logic, submit payment, etc.
payment.setTransId(tid);
payment.setCardInfo(null); // set payment info to null so it isn't included in response

return repository.saveAndFlush(payment);
}
}
Я могу проверить, что код в классе @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»