避免在具有@SpringBootTest的测试中建立存储库数据库连接



我有一个用@SpringBootTest注释的测试类,它也@AutoConfigureWebTestClient测试一些路由器功能。 路由器中的所有处理程序都有@Autowired存储库,这些存储库转到 couchbase。 我使用 @MockBean 来测试其中一个存储库,但不使用其他存储库。

路由器

@Configuration
public class Router {
public Router(Handler1 handler1, Handler2 handler2){
this.handler1 = handler1;
this.handler2 = handler2;
}
@Bean
public RouterFunction<ServerResponse> route() {
return RouterFunctions()
.route(GET("/path1").and(accept(MediaType.APPLICATION_JSON)), handler1::findAll)
.andRoute(GET("/path2").and(accept(MediaType.APPLICATION_JSON)), handler2::findAll);
}

处理程序类

@Service
public class Handler1{
Repository1 repository;
@Autowired
public Handler1(Repository1 repository){
this.repository = repository;
}
}

测试类

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureWebTestClient
public class Handler1Test {
@Autowired
private WebTestClient webClient;

@MockBean
private Repository1 repositoryMock;
@Test
public void findAll() throws IOException {
Mockito.when(repositoryMock.findall()).thenReturn(Mono.just(""));
webClient.get()
.uri("/path1")
.accept(MediaType.APPLICATION_JSON)
.exchange()
.expectStatus().isOk();
}
}

每当我运行测试时,它都会连接到数据库。但是测试正确使用了模拟。

日志显示如下:

2020-06-19 15:36:45.295  INFO 41724 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Couchbase repositories in DEFAULT mode.
2020-06-19 15:36:45.525  INFO 41724 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 229ms. Found 21 Couchbase repository interfaces.

如何阻止连接发生?

编辑: 如果我添加此注释仍然想连接

@EnableAutoConfiguration(exclude = {CouchbaseAutoConfiguration.class,
CouchbaseDataAutoConfiguration.class,
CouchbaseRepositoriesAutoConfiguration.class,
CouchbaseReactiveDataAutoConfiguration.class,
CouchbaseReactiveRepositoriesAutoConfiguration.class})

我所有的存储库都是从ReactiveCouchbaseRepository扩展而来的,所以在我的情况下,不包括CouchbaseReactiveRepositoryAutoConfiguration.class完成了这项工作:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@EnableAutoConfiguration(exclude = {CouchbaseAutoConfiguration.class,
CouchbaseDataAutoConfiguration.class,
CouchbaseRepositoriesAutoConfiguration.class,
CouchbaseReactiveDataAutoConfiguration.class,
CouchbaseReactiveRepositoriesAutoConfiguration.class})
@AutoConfigureWebTestClient
public class GeographicAreaHandlerTest {...}

但这还不够。我不得不用 注释我的 CouchbaseConfiguration 类

@Profile({"default", "development"})
public class CouchbaseConfiguration extends AbstractReactiveCouchbaseConfiguration {}

并在我的测试中启用名为测试的配置文件。

相关内容

最新更新