4

我想使用@WebMvcTest和模拟依赖项来测试我的控制器,但是 Spring Boot 的 AutoConfiguration 会自动加载我的 Couchbase (Spring Data) 配置。Couchbase 在某些运行测试的平台上不可用,因此 Test 类将抛出异常。如何从 AutoConfiguration 机制中排除某些类?

我尝试了并加载另一个应用程序上下文的excludeFilters选项,但这不起作用。@WebMvcTest@ActiveProfile

测试配置:

@RunWith(SpringRunner.class)
@WebMvcTest(value = ExchangeJobImportController.class, excludeFilters = @ComponentScan.Filter(classes = CouchbaseConfiguration.class))
@ActiveProfiles("test")
public class ExchangeJobImportControllerTest {
  ...
}

沙发底座配置:

@Configuration
@EnableCouchbaseAuditing
@EnableConfigurationProperties({CouchbaseProperties.class})
@EnableCouchbaseRepositories(basePackages = "com....")
public class CouchbaseConfiguration extends AbstractCouchbaseConfiguration {
  ...
}
4

2 回答 2

1

经过一番挣扎后,我找到了解决方案:在注释中排除带@SpringBootApplication注释的类@WebMvcTest

@RunWith(SpringRunner.class)
@WebMvcTest(value = ExchangeJobImportController.class, excludeAutoConfiguration = Application.class, secure = false)
@ActiveProfiles("localhost")
public class ExchangeJobImportControllerTest {
  ...
}

作为记录,我使用的是 Spring Boot 1.5.1.RELEASE

于 2017-02-24T08:20:29.660 回答
0

@ComponentScan.Filter我知道已经有一段时间了,但我想解决方案不起作用的原因是它classes默认为字段查找注释类型。

因此,设置FilterTypeasASSIGNABLE_TYPE应该适用于您的情况:

@ComponentScan.Filter(
    type = FilterType.ASSIGNABLE_TYPE,
    classes = CouchbaseConfiguration.class
)
于 2020-03-14T08:42:29.613 回答