Spring Boot单元测试:如何仅注入配置类而不启动全量应用
解决方案:轻量测试
@Configuration配置类 要实现仅加载目标配置类并完成配置注入,无需初始化整个应用上下文,可以通过以下方式修改测试代码:
@ExtendWith(SpringExtension.class) @ContextConfiguration(classes = SpringNyseFeedConfig.class) @EnableConfigurationProperties @ActiveProfiles("test") public class SpringNyseFeedConfigTest { @Autowired private SpringNyseFeedConfig config; @Test void propertiesReadAsExpected() { assertNotNull(config); ServerConnection requestServer = config.getRequestServer(); assertEquals("192.168.1.200", requestServer.getHost()); // 其他配置属性断言 } }
关键注解说明
@ExtendWith(SpringExtension.class):启用Spring测试框架支持,是JUnit 5的标准写法,替代旧版@RunWith(SpringRunner.class)。@ContextConfiguration(classes = SpringNyseFeedConfig.class):明确指定Spring上下文仅加载目标配置类,避免初始化应用中其他无关Bean。如果父类FeedConfig包含必要的配置逻辑(比如自身也是@Configuration类),需要将其也加入classes数组中,例如classes = {SpringNyseFeedConfig.class, FeedConfig.class}。@EnableConfigurationProperties:开启配置属性绑定功能,确保@ConfigurationProperties(prefix = "feed")能正常读取application-test.yml中的配置值。@ActiveProfiles("test"):保留该注解,确保加载测试环境的配置文件。
注意事项
确保application-test.yml文件放置在测试资源目录src/test/resources下,配置路径和前缀与代码中的prefix = "feed"匹配,这样配置才能被正确读取并绑定到SpringNyseFeedConfig实例中。测试运行时,@PostConstruct标注的completeConfig()方法也会正常执行,完成配置的最终设置与校验。
内容的提问来源于stack exchange,提问作者Sam Goldberg
相关产品推荐
相关产品推荐

