[英]Spring framework spring-test v5.2.0 MergedAnnotations Search Strategy problem
這里我們在將 spring-test 升級到 5.2.0.RELEASE 后,在 IT 測試中出現了問題。
以下代碼:
@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);
}
}
給了我們以下錯誤:
java.lang.NoClassDefFoundError: org.springframework.core.annotation.MergedAnnotations$SearchStrategy
在 org.springframework.test.context.support.TestPropertySourceUtils.buildMergedTestPropertySources(TestPropertySourceUtils.java:74) 在 org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:org.springframetext) .support.AbstractTestContextBootstrapper.buildDefaultMergedContextConfiguration(AbstractTestContextBootstrapper.java:312) 在 org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:265) 在 org.AbstractTestContextBootstrapper.java:265) .java:108) 在 org.springframework.boot.test.context.SpringBootTestContextBootstrapper.buildTestContext(SpringBootTestContextBootstrapper.java:99) 在 org.springframework.test.context.TestContextManager.(TestContextManager.java:137) 在 org.springframework.test .context.TestContextManager.( TestContextManager.java:122) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTestContextManager(SpringJUnit4ClassRunner.java:151) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.(SpringJUnit4ClassRunner.java:142) 在 org. springframework.test.context.junit4.SpringRunner.(SpringRunner.java:49) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance( NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at org .junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder) .java:59 ) 在 org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 在 org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 在 org.junit.internal.requests.ClassRequest。 getRunner(ClassRequest.java:33) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) at com.intellij .rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) 引起:java.lang.ClassNotFoundException:org.springframework.core.annotation .MergedAnnotations$SearchStrategy at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:766) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java .base/java.lang.ClassLoader.loadClass(ClassLoader.java:1077) ... 25 更多
注意:在spring-test 5.2.0.RC1 版本之前,它可以完美運行。
好像和這個有關。
有沒有人有任何線索?
感謝您的幫助 =)
需要在項目中有一致的 Spring 版本。
我通過使用彈簧靴解決了我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.