如何从 Spring Boot WebMvcTest 中排除自动配置
How to exclude auto-configuration from Spring Boot WebMvcTest
我正在尝试实施 Spring Boot Mock MVC 单元测试,并希望排除 spring-cloud-consul 自动配置以避免需要连接到远程服务。
看起来我应该可以通过以下方式实现这一目标:
@RunWith(SpringRunner.class)
@WebMvcTest(value = MyController.class, excludeAutoConfiguration = ConsulAutoConfiguration.class)
@AutoConfigureMockMvc(addFilters = false, printOnlyOnFailure = false)
然而,这似乎仍在尝试连接到远程 Consul,因为我无法在离线时 运行 此单元测试。
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to consul.****:8500 [consul.****/**.**.**.**] failed: connect timed out
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:150)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
如果我将 -Ddebug 添加到单元测试 运行 配置中,我不会在排除项中看到此列表:
Positive matches:
-----------------
ConsulAutoConfiguration matched:
- AllNestedConditions 2 matched 0 did not; NestedCondition on ConditionalOnConsulEnabled.OnConsulEnabledCondition.FoundClass @ConditionalOnClass found required class 'com.ecwid.consul.v1.ConsulClient'; @ConditionalOnMissingClass did not find unwanted class; NestedCondition on ConditionalOnConsulEnabled.OnConsulEnabledCondition.FoundProperty @ConditionalOnProperty (spring.cloud.consul.enabled) matched (ConditionalOnConsulEnabled.OnConsulEnabledCondition)
Exclusions:
-----------
None
我想知道这是不是因为这个配置是在 bootstrap 时间加载的?
任何帮助将不胜感激,提前致谢。
设法通过向测试添加以下注释找到解决方法。
@TestPropertySource(properties="spring.cloud.consul.enabled=false")
我正在尝试实施 Spring Boot Mock MVC 单元测试,并希望排除 spring-cloud-consul 自动配置以避免需要连接到远程服务。
看起来我应该可以通过以下方式实现这一目标:
@RunWith(SpringRunner.class)
@WebMvcTest(value = MyController.class, excludeAutoConfiguration = ConsulAutoConfiguration.class)
@AutoConfigureMockMvc(addFilters = false, printOnlyOnFailure = false)
然而,这似乎仍在尝试连接到远程 Consul,因为我无法在离线时 运行 此单元测试。
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to consul.****:8500 [consul.****/**.**.**.**] failed: connect timed out
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:150)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
如果我将 -Ddebug 添加到单元测试 运行 配置中,我不会在排除项中看到此列表:
Positive matches:
-----------------
ConsulAutoConfiguration matched:
- AllNestedConditions 2 matched 0 did not; NestedCondition on ConditionalOnConsulEnabled.OnConsulEnabledCondition.FoundClass @ConditionalOnClass found required class 'com.ecwid.consul.v1.ConsulClient'; @ConditionalOnMissingClass did not find unwanted class; NestedCondition on ConditionalOnConsulEnabled.OnConsulEnabledCondition.FoundProperty @ConditionalOnProperty (spring.cloud.consul.enabled) matched (ConditionalOnConsulEnabled.OnConsulEnabledCondition)
Exclusions:
-----------
None
我想知道这是不是因为这个配置是在 bootstrap 时间加载的?
任何帮助将不胜感激,提前致谢。
设法通过向测试添加以下注释找到解决方法。
@TestPropertySource(properties="spring.cloud.consul.enabled=false")