Spring Consul - 禁用单元测试

时间:2016-09-21 16:54:54

标签: spring spring-boot consul service-discovery

更新

下面列出的我的班级(ServiceDiscoveryConfiguration)从未被使用过。即使我删除@EnableDiscoveryClient以尝试完全避免设置,它仍会尝试连接到Consul。

对我来说唯一有用的就是彻底消除Consul 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>

如果不通过配置文件和注释设置,我该怎么做才能阻止Consul运行单元测试?

原始

我有一个使用Spring Consul的应用程序。 我有一个类设置来启用这样的发现:

@Profile ("!" + Profiles.UNIT_TEST)
@Configuration
@EnableDiscoveryClient
public class ServiceDiscoveryConfiguration {
}

如果我没有弄错的话,应该禁用领事部分。基本测试类(它是我所有单元测试之间共享的abstract)使用以下注释进行设置。这就是我认为问题所在的地方。

@SpringBootTest (classes = Service.class)
@WebAppConfiguration
@TestExecutionListeners (...)
@DirtiesContext
@ActiveProfiles (Profiles.UNIT_TEST)
@Test (...)
public abstract class AbstractBootTest extends AbstractTestNGSpringContextTests {
  // ...
}

当我执行测试时,我得到:

  

引起:com.ecwid.consul.transport.TransportException:   java.net.ConnectException:拒绝连接

这让我相信配置文件激活不起作用或我使用!规范上的@Profile运算符的语法没有按我认为的那样做。根执行类本身有基本注释,包括@ComponentScan注释,我知道有正在扫描的相应包。

协助?

5 个答案:

答案 0 :(得分:2)

您可以通过

停用
@TestPropertySource(properties = {"spring.cloud.consul.config.enabled=false"})

答案 1 :(得分:1)

在test / resources下的application.properties文件中添加以下属性

spring.cloud.discovery.enabled=false
spring.cloud.consul.enabled=false
spring.cloud.consul.config.enabled=false

这将在测试您的应用程序时禁用领事集成

答案 2 :(得分:1)

如果您的项目中有bootstrap.properties文件,则应在bootstrap.properties下创建test/resources文件:

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

这将禁用测试中的领事集成

答案 3 :(得分:0)

配置文件注释正确

@Profile ("!" + Profiles.UNIT_TEST) 

配置文件激活看起来还不错,

@ActiveProfiles (Profiles.UNIT_TEST)

您写道您正在使用ComponentScan,这很重要,因为如果bean由@Bean注释方法实例化,则忽略bean上的@Profile注释。可能是你再次检查,看,这不会发生吗?

要缩小问题的范围,您可以尝试:

在ServiceDiscoveryConfiguration的构造函数中设置断点,以查看它是否已实例化

删除@EnableDiscoveryClient以查看这是否是导致问题的真正原因

答案 4 :(得分:0)

问题是,如果你在类路径中有spring-consul,它会尝试自动配置它