我正在尝试使用junit对spring-boot应用程序进行单元测试。我将application-test.properties放在src / test / resources下。我有一个读取Application.properties的ApplicationConfiguration类。
我的测试课看起来像这样
@RunWith(SpringRunner.class) @SpringBootTest(classes=ApplicationConfiguration.class) @TestPropertySource(locations = "classpath:application-test.properties") @ActiveProfiles("test") public class TestBuilders { @Autowired private ApplicationConfiguration properties;
当我尝试读取属性时,它始终为null。
我的ApplicationConfiguration类看起来像这样
@Configuration @ConfigurationProperties @PropertySources({ @PropertySource("classpath:application.properties"), @PropertySource(value="file:config.properties", ignoreResourceNotFound = true)}) public class ApplicationConfiguration{ private xxxxx; private yyyyy;
我尝试了在google上找到的所有可能方法。请帮忙!提前致谢。
问题是您没有@EnableConfigurationProperties参加测试班。 加载应用程序时,它从@SpringBootApplication可能有的主类(其中有个)@EnableConfigurationProperties开始,因此在启动应用程序时可以工作。 而当您仅ApplicationConfiguration在此处指定的类 上运行Test时
@EnableConfigurationProperties
@SpringBootApplication
ApplicationConfiguration
@SpringBootTest(classes=ApplicationConfiguration.class)
Spring不知道它必须启用配置属性,因此这些字段不会注入,因此为null。但是spring正在读你的application- test.properties文件。只需将值直接注入测试类即可确认
application- test.properties
@Value("${xxxxx}") private String xxxxx;
在此注入值。但是要注入一个类中,ConfigurationProperties您需要使用@EnableConfigurationProperties
ConfigurationProperties
把@EnableConfigurationProperties你的测试类和everythhing工作正常。