![](/img/trans.png)
[英]SpringBoot @WebMvcTest, autowiring RestTemplateBuilder
[英]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
。 我为此属性分配db
或file
值。 根据其值,将创建适当的存储库实现并将其注入我的服务层。 当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.