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