【问题标题】:Spring framework spring-test v5.2.0 MergedAnnotations Search Strategy problemSpring框架spring-test v5.2.0 MergedAnnotations搜索策略问题
【发布时间】:2020-04-10 18:23:34
【问题描述】:

这里我们在将 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:386) 在 org.springframework.test.context.support.AbstractTestContextBootstrapper.buildDefaultMergedContextConfiguration(AbstractTestContextBootstrapper.java:312) 在 org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:265) 在 org.springframework.test.context.support.AbstractTestContextBootstrapper.buildTestContext(AbstractTestContextBootstrapper.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) 在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) 在 org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) 在 org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) 在 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) 在 com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49) 在 com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) 在 com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) 在 com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) 引起:java.lang.ClassNotFoundException: org.springframework.core.annotation.MergedAnnotations$SearchStrategy 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:766) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1077) ... 25 更多

注意:在spring-test 的 5.2.0.RC1 版本之前,它可以完美运行。

好像和this有关。

有人知道吗?

感谢您的帮助 =)

【问题讨论】:

  • 我遇到了完全相同的问题。根本原因是我有两个不同版本的 Spring 用于不同的工件。检查您的 pom.xml 并为所有工件标准化 Spring 的版本。

标签: java spring


【解决方案1】:

项目中需要有一致的Spring版本。

我使用 spring boot 解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2011-03-20
    • 2020-11-30
    • 2020-04-20
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多