Spring领事-禁用单元测试 更新
下面列出的我的类(Spring领事-禁用单元测试 更新,spring,spring-boot,consul,service-discovery,Spring,Spring Boot,Consul,Service Discovery,下面列出的我的类(ServiceDiscoveryConfiguration)从未被使用。即使我删除了@enablescoveryclient以尝试完全避免安装,它仍然会尝试连接到领事 对我来说唯一有效的办法就是完全撤销领事Maven的职务: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-al
ServiceDiscoveryConfiguration
)从未被使用。即使我删除了@enablescoveryclient
以尝试完全避免安装,它仍然会尝试连接到领事
对我来说唯一有效的办法就是完全撤销领事Maven的职务:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
如果我没有弄错的话,这个应该会禁用领事部分。基本测试类(它是在我的所有单元测试之间共享的摘要
)由以下注释设置。这就是我认为问题所在
@SpringBootTest (classes = Service.class)
@WebAppConfiguration
@TestExecutionListeners (...)
@DirtiesContext
@ActiveProfiles (Profiles.UNIT_TEST)
@Test (...)
public abstract class AbstractBootTest extends AbstractTestNGSpringContextTests {
// ...
}
当我执行测试时,我得到:
原因:com.ecwid.consur.transport.TransportException:
java.net.ConnectException:连接被拒绝
这使我相信配置文件激活不起作用,或者我的语法使用了@Profile
规范中的code>操作符没有执行我认为应该执行的操作。根执行类本身有一个基本的注释,包括一个@ComponentScan
注释,我知道它有相应的被扫描包
协助?配置文件注释正确
@Profile ("!" + Profiles.UNIT_TEST)
配置文件激活看起来也不错
@ActiveProfiles (Profiles.UNIT_TEST)
您写道您正在使用ComponentScan,这很重要,因为如果bean由@bean注释方法实例化,那么bean上的@Profile注释将被忽略。也许你再检查一下,看看,这不会发生吗
要缩小问题范围,您可以尝试:
在ServiceDiscoveryConfiguration的构造函数中设置断点,以查看它是否实例化
删除@EnableDiscoveryClient以查看这是否真的是问题的原因问题在于,如果类路径中有spring Consor,它将尝试自动配置它您可以通过
@TestPropertySource(properties = {"spring.cloud.consul.config.enabled=false"})
在test/resources下的application.properties文件中添加以下属性
spring.cloud.discovery.enabled=false
spring.cloud.consul.enabled=false
spring.cloud.consul.config.enabled=false
这将在测试应用程序时禁用Consor集成如果项目中有bootstrap.properties
文件,则应在test/resources
下创建bootstrap.properties
文件:
spring.application.name=<service-name>
spring.cloud.bus.enabled=false
spring.cloud.discovery.enabled=false
spring.cloud.consul.enabled=false
spring.cloud.consul.config.enabled=false
spring.application.name=
spring.cloud.bus.enabled=false
spring.cloud.discovery.enabled=false
spring.cloud.concur.enabled=false
spring.cloud.concur.config.enabled=false
这将禁用测试中的Consor集成我认为这与配置文件无关。我正在更新我的问题,因为我必须删除Maven依赖项。所以在调试之后,这个类永远不会被击中。就好像它忽略了那个特定的配置选项。啊!那是个更好的主意!有什么解决办法吗
spring.application.name=<service-name>
spring.cloud.bus.enabled=false
spring.cloud.discovery.enabled=false
spring.cloud.consul.enabled=false
spring.cloud.consul.config.enabled=false