当前位置: 首页 > 知识库问答 >
问题:

注入配置属性在我的测试中不起作用

谯和煦
2023-03-14

我卡住了!如果跳过测试并部署到tomcat自动布线,则配置属性文件将正常工作。在我的测试中,它失败了!我不确定我错过了什么。

git:
  localRepo: './powershell-status-scripts/'
  remoteRepo: 'https://github.com/...'
@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;
    }
}
@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() {
      ...
    }

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

@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类上。停止复制并不能解决问题。

共有1个答案

昌勇锐
2023-03-14

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

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

这将启用配置属性的注入。

 类似资料:
  • 我成功地注入了Gradle项目。应用程序。yml,然后将其注入服务应用程序。我的申请。yml看起来像这样: 但只有当我从cli启动应用程序时,它才有效: 如果我尝试从IntelliJ启动应用程序,它不起作用,并且失败了: 我阅读了Stackoverflow的所有答案,他们提出了两种解决方案: > 使用Spring轮廓 修改运行配置并在启动 gradle 任务之前运行:流程资源 当我从Intelli

  • 并添加注释 我得到一条消息:没有测试找到test runner JUnit5,并且在Problems选项卡中有SpringBootTest.jar无法读取或者不是有效的ZIP文件 也试过 我也试过: 如果我将字符串myUrl硬编码为“http://localhost:8090”,则测试工作正常,因此问题在于@value不工作

  • 我有一个Spring配置类,我正在使用它从属性文件中读取并创建bean。 在xml文件中 我能够设置和属性,但无法将属性设置为,因为我们需要注入及其。请让我知道如何在方法中注入bean。

  • 问题内容: 我想制作一个DatabaseConfig类来设置与数据库相关的东西(EntityManager,DataSource,TransactionManager)并获取我在字段上使用的属性 喜欢 问题是,所有这些字符串都是NULL,而不是我的属性文件的值。 如果我将代码放入我的类(具有和中引用的代码),则值注入有效 简而言之,@Value在我的Application类中有效,但在我的自定义@

  • 如何将和的值注入Spring重试注释?在下面的示例中,我想用配置属性的相应引用替换maxAttempts的值和backoff值的值。

  • 我想使用自定义的<code>TestExecutionListener</code>和<code>SpringJUnit4ClassRunner</code>结合使用,在我的测试数据库上运行Liquibase模式设置。我的<code>TestExecutionListener</code>工作正常,但当我在类上使用注释时,测试中DAO的注入不再工作,至少实例为空。 侦听器相当简单: 日志中没有错误