Aquí tenemos un problema en una prueba de TI después de la actualización de primavera-test para 5.2.0.RELEASE.
El siguiente código:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
// @WebMvcTest
public class TestedControllerIT {
private static final ObjectMapper JSON_OBJECT_MAPPER = new ObjectMapper();
private static final String TOPIC = "topic";
@Autowired
private MockMvc mockMvc;
@Autowired
private TestedRepository testedRepository;
@Before
public void init() {
testedRepository.deleteAll();
}
@Test
public void shouldReinjectError()
throws Exception {
// Given
LinkedHashMap kafkaMessage = new LinkedHashMap<String, Object>();
kafkaMessage.put("orderNumber", "orderNumber");
kafkaMessage.put("recordedDate", 1564652757990L);
kafkaMessage.put("creationDate", 1564652546217L);
final RejetTechnique rejetTechnique = RejetTechnique.builder()
.creationDate(LocalDateTime.now())
.id("1")
.offset(12L)
.topic(TOPIC)
.stackTrace("")
.kafkaMessage(kafkaMessage)
.build();
testedRepository.save(rejetTechnique);
// When
final MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/rejet-technique/reinjection"))
.andExpect(MockMvcResultMatchers.status().is(200))
.andReturn();
//Then
assertThat(result.getResponse().getContentAsString()).isEqualTo("{\"status\":\"OK\"}");
assertThat(testedRepository.findAll().size()).isEqualTo(0);
final Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
TopicPartition topicPartition = new TopicPartition(TOPIC, 0);
ConsumerRecords<String, Object> records;
try (KafkaConsumer kafkaConsumer = new KafkaConsumer(props)) {
List<TopicPartition> topics = Collections.singletonList(topicPartition);
kafkaConsumer.assign(topics);
kafkaConsumer.seekToEnd(topics);
long current = kafkaConsumer.position(topicPartition);
kafkaConsumer.seek(topicPartition, current - 1);
Duration duration = Duration.of(1000, ChronoUnit.MILLIS);
records = kafkaConsumer.poll(duration);
}
String resultRecordValue = (String) records.records(topicPartition).get(0).value();
assertThat(resultRecordValue).isEqualTo(convertMessageToJson(kafkaMessage));
}
private String convertMessageToJson(final Object message)
throws JsonProcessingException {
return JSON_OBJECT_MAPPER.writeValueAsString(message);
}
}
se nos da el error siguiente:
java.lang.NoClassDefFoundError: org.springframework.core.annotation.MergedAnnotations $ SearchStrategy
en org.springframework.test.context.support.TestPropertySourceUtils.buildMergedTestPropertySources (TestPropertySourceUtils.java:74) en org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration (AbstractTestContextBootstrapper.java:386) en org.springframework.test.context .support.AbstractTestContextBootstrapper.buildDefaultMergedContextConfiguration (AbstractTestContextBootstrapper.java:312) en org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration (AbstractTestContextBootstrapper.java:265) en org.springframework.test.context.support.AbstractTestContextBootstrapper.buildTestContext (AbstractTestContextBootstrapper .java: 108) en org.springframework.boot.test.context.SpringBootTestContextBootstrapper.buildTestContext (SpringBootTestContextBootstrapper.java:99) a org.springframework.test.context.TestContextManager. (TestContextManager.java:137) en org.springframework.test.context.TestContextManager. (TestContextManager.java:122) en org.springframework.test.context.junit4.SpringJUnit4ClassRunner .createTestContextManager (SpringJUnit4ClassRunner.java:151) en org.springframework.test.context.junit4.SpringJUnit4ClassRunner. (SpringJUnit4ClassRunner.java:142) en org.springframework.test.context.junit4.SpringRunner. (SpringRunner.java:49) a java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (Método nativo) en java.base / jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) en java.base / jdk.internal.reflect.DelegatingConstructorAccessorImpl .newInstance (DelegatingConstructorAccessorImpl.java:45) en java.base / java.lang.reflect.Constructor.newInstance (Constructor.java:490) en org.junit.internal.builders.AnnotatedBuilder.buildRunner (AnnotatedBuilder.java:104) en org.junit.internal.builders.AnnotatedBuilder.runnerForClass (AnnotatedBuilder.java:86) en org.junit .runners.model.RunnerBuilder.safeRunnerForClass (RunnerBuilder.java:59) en org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass (AllDefaultPossibilitiesBuilder.java:26) en org.junit.runners.model.RunnerBuilder.safeRunnerForClass (RunnerBuilder.java : 59) en org.junit.internal.requests.ClassRequest.getRunner (ClassRequest.java:33) en com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs (JUnit4IdeaTestRunner.java:49) a $ com.intellij.rt.junit.IdeaTestRunner Repeater.startRunnerWithArgs (IdeaTestRunner.java:33) en com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart (JUnitStarter.java:230) en com.intellij.rt.junit.JUnitStarter.main (JUnitStarter.java:58) Causado por: java.lang.ClassNotFoundException: org.springframework.core.annotation.MergedAnnotations $ SearchStrategy en java.base / jdk.internal.loader.BuiltinClassLoader.loadClass (BuiltinClassLoader.java : 766) en java.base / jdk.internal.loader.ClassLoaders $ AppClassLoader.loadClass (ClassLoaders.java:178) en java.base / java.lang.ClassLoader.loadClass (ClassLoader.java:1077) ... más 25
Aviso: Funciona perfectamente hasta el lanzamiento 5.2.0.RC1 de primavera-test .
Que parece estar relacionado con este .
Alguien tiene alguna idea ?
Gracias por la ayuda =)
Necesidad de contar con versiones de primavera consistentes en proyecto.
Resolví mi problema mediante el uso de botas de primavera.