Quarkus单元测试无法读取application.properties配置问题
问题描述
我已在application-test.properties中配置:
%test.feature.retry.enabled=true
在application.properties中配置:
%dev.feature.retry.enabled=true
Java配置接口代码如下:
@ConfigMapping(prefix = "feature") public interface FeatureConfig { @WithName("retry.enabled") boolean isRetryEnabled(); }
业务服务类GenerationService中注入并使用该配置:
@ApplicationScoped public class GenerationService { @Inject private FeatureConfig featureConfig; // 注:原代码中写的SoaFeatureConfig应为笔误,需与配置接口类名保持一致 public Response mainMethod() { if (featureConfig.isRetryEnabled()) { // 业务逻辑 } } }
但在测试类中使用@Mock调用FeatureConfig时,返回值始终为false,请问我遗漏了什么?
问题分析与解决
核心原因
@Mock生成的Mock对象,所有方法默认返回对应类型的初始值——布尔类型的初始值就是false,它不会自动读取你配置文件里的内容。
两种解决方式
手动指定Mock方法的返回值
在测试类中,用Mockito的API显式设置isRetryEnabled()的返回结果:@InjectMocks private GenerationService generationService; @Mock private FeatureConfig featureConfig; @BeforeEach void setUp() { MockitoAnnotations.openMocks(this); // 强制让Mock方法返回true when(featureConfig.isRetryEnabled()).thenReturn(true); }放弃Mock,加载真实测试配置
如果想让测试真实读取application-test.properties的配置,不要给FeatureConfig加@Mock注解,直接让测试容器注入真实的配置实例:- 若用Quarkus:测试类加
@QuarkusTest注解,容器会自动加载测试环境配置 - 若用Spring Boot:测试类加
@SpringBootTest注解,默认会读取application-test.properties
- 若用Quarkus:测试类加
额外修正点
原代码中GenerationService注入的SoaFeatureConfig和配置接口FeatureConfig名称不一致,这是笔误,必须修正为相同类型,否则会出现注入失败问题。
内容的提问来源于stack exchange,提问作者Eve
相关产品推荐
相关产品推荐

