首页 > 解决方案 > 在 Junit ClassRule 中访问 spring-boot application.properties 元素

问题描述

我想在 junit 静态类规则中访问资源/属性文件元素(在下面的代码中它的cardEventTopic和常量)。cardEventErrorTopic有什么办法可以做到这一点?由于元素已经存在于属性文件中,我不想将它们作为静态常量放在测试文件中。也不适用于@Value("${}")静态上下文。如果有办法使这项工作有任何帮助。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = PaymentAccountUpdaterApplication.class,
                webEnvironment = SpringBootTest.WebEnvironment.NONE)
@TestPropertySource(locations = "classpath:application-messaging.properties")
public class CardIntegrationTest {

    private final static String cardEventTopic = "TP.PRF.CARDEVENTS";
    private final static String cardEventErrorTopic = "TP.PAYMENTS.CARDEVENTS.ERRORS";

    @ClassRule
    public static KafkaEmbedded kafkaEmbedded =
            new KafkaEmbedded(1, false, cardEventTopic, cardEventErrorTopic);
    // rest of the code
}

标签: spring-bootspring-boot-test

解决方案


您可以通过类注释定义嵌入式Kafka,并在那里使用 spEL 定义主题:

@EmbeddedKafka(topics = {"${my.topic1}", "${my.topic2}"})

或者,您可以在任何配置类中将 embededKafka 定义为单独的 bean,并具有您需要的所有属性。

并且不要忘记自动装配它。

@Autowired
private EmbeddedKafkaBroker embeddedKafka;

推荐阅读