繁体   English   中英

从SpringBoot WebMvcTest或其他应用程序上下文中扫描WebMvcTest排除PropertySource

[英]Excluding PropertySource from scanning in SpringBoot WebMvcTest or other application context for WebMvcTest

我使用Spring Boot开发Web应用程序。 Web层的单元测试有问题。 对于这些测试,我使用注释@WebMvcTest 问题是我的主要配置类包含带有Java arg的@PropertySource ,其中包含外部属性文件的路径,并且当我启动单元Web测试时,发生了无法解析此Java arg的错误(当然,我可以添加此java arg来运行我的测试的配置,但是我的Web单元测试不需要此文件)。

我的主要配置类:

@SpringBootApplication
@PropertySource(value = {"${pathto.configfile}"})
@EnableAspectJAutoProxy
public class Application {

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

}

我的第一个解决方案是使用"!test"配置文件创建单独的配置类,然后将@PropertySource("..")到该配置类。 并在我的单元测试中添加@ActiveProfiles("test")

我的第二个配置类:

@Configuration
@Profile({"!test"})
@PropertySource(value = {"${pathto.configfile}"})
public class PropertyConfiguration {

}

对于单元Web测试,此解决方案非常有效。 但是新的问题出现在我的Web应用程序的启动中。 在我的外部属性文件中,我具有属性spring.profiles.active 我为此属性分配dbfile值。 根据其值,将创建适当的存储库实现并将其注入我的服务层。 当value为db ,应用程序启动良好,但是当value为file时将引发错误: NoSuchBeanDefinitionException

当我回到以前的版本(没有第二个配置文件)时,两种情况下的应用程序都可以很好地启动(但不能进行Web单元测试)

因此,请解释一下,为什么当spring.profiles.active=db值启动时应用程序正常,但是当spring.profiles.active=file失败时-为什么我该如何解决我的任务? 我试图找到如何将其他应用程序上下文添加到Web单元测试中,但没有找到。 任何想法?:)

对于我的数据库存储库,我使用的是Spring Data JPA,因此,我没有创建这些存储库的实现,但是创建了我的文件存储库的实现,并且我的实现具有@Profile("file") 从实现中删除此注释后,它仅保留在接口上。 我不知道为什么一个配置类起作用,但是两个类却没有。 但是问题解决了)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM