【问题标题】:Injecting Configuration Properties is not working in my test注入配置属性在我的测试中不起作用
【发布时间】:2015-11-18 01:30:28
【问题描述】:

我被困住了!如果我跳过测试并部署到 tomcat 自动连接配置属性文件工作。在我的测试中,它失败了!我不确定我错过了什么。

这是我的设置:

Spring Boot v 1.2.5.RELEASE 应用程序.yml

git:
  localRepo: './powershell-status-scripts/'
  remoteRepo: 'https://github.com/...'

RepositoryProperties 这个类有属性的getter和setter

@Configuration
@ConfigurationProperties(locations = "classpath:application.yml", prefix = "git", ignoreUnknownFields = false)
public class RepositoryProperties {

    private String localRepo;

    private String remoteRepo;

    public RepositoryProperties() {

    }

    public String getLocalRepo() {
        return localRepo;
    }

    public void setLocalRepo(String localRepo) {
        this.localRepo = localRepo;
    }

    public String getRemoteRepo() {
        return remoteRepo;
    }

    public void setRemoteRepo(String remoteRepo) {
        this.remoteRepo = remoteRepo;
    }
}

Application.java

@EnableAutoConfiguration
@EnableConfigurationProperties
@ComponentScan(basePackages = "com.sendash.admin")
@EnableJpaRepositories("com.sendash.admin.dao.jpa") 
@EnableSwagger 
public class Application extends SpringBootServletInitializer {

    private static final Class<Application> applicationClass = Application.class;
    private static final Logger log = LoggerFactory.getLogger(applicationClass);

    public static void main(String[] args) {
        SpringApplication.run(applicationClass, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(applicationClass);
    }

}

GitService - 自动装配属性适用于 tomcat!

@Service
@EnableConfigurationProperties
public class GitService {

    @Autowired
    private RepositoryProperties repositoryProperties;

    public void updateLocalRepository() {
      ...
    }

由于 NPE,GitServiceTest 此类在初始化时失败。属性为空。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Application.class)
@Profile("test")
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class })
public class GitServiceTest {

    @Autowired
    private static GitService manager;

    @Autowired
    private static RepositoryProperties properties;

    private static final String localRepoLocation = properties.getLocalRepo();

粘贴后我确实意识到 @EnableConfigurationProperties 在 Application.java 和 GitService.java 类上。停止复制并不能解决问题。

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    如果您想在测试中使用 Spring Boot,您应该相应地配置测试。为此,请删除 ContextConfiguration 并添加以下内容:

    @SpringApplicationConfiguration(classes = Application.class, initializers = ConfigFileApplicationContextInitializer.class)
    

    这应该能够注入配置属性。

    【讨论】:

      【解决方案2】:

      我确实按照建议更改了 ContextConfiguration,但我的主要问题是尝试自动装配静态字段。 @BeforeClass 测试设置逻辑是静态的,所以我需要稍微移动一下,但我让它工作了。谢谢你的建议。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-17
        • 1970-01-01
        • 1970-01-01
        • 2017-09-21
        • 2017-10-10
        • 2021-09-23
        • 1970-01-01
        • 2017-04-17
        相关资源
        最近更新 更多