Избегайте подключения к базе данных репозитория при тестировании с @SpringBootTest - PullRequest
0 голосов
/ 20 июня 2020

У меня есть тестовый класс, помеченный @SpringBootTest, он также имеет @AutoConfigureWebTestClient для тестирования некоторых функций маршрутизатора. Все обработчики в маршрутизаторе имеют репозитории @Autowired, которые go относятся к couchbase. Я использую @MockBean для тестирования одного из репозиториев, но другие не использую.

Router

@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;
 }
}

Test Class

@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})

1 Ответ

0 голосов
/ 20 июня 2020

Все мои репозитории расширяются от ReactiveCouchbaseRepository, поэтому в моем случае исключение CouchbaseReactiveRepositoriesAutoConfiguration.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 {}

и включить в моих тестах профиль, называемый тестированием.

...