에서 이전 시리즈 블로그 게시물 수 Java Junit 테스트에 TestContainer를 사용하는 방법을 설명했습니다. 다루지 않은 몇 가지 문제는 N1QL 테스트, 자체 버킷 생성, 인덱스 생성 등에 관한 것이었는데요... 이 게시물은 Spring 데이터 카우치베이스 테스트 사례와 우리가 생략한 질문들을 다루고 있습니다.

구성할 수 없는 포트 하드와이어

현재 Couchbase Server의 제한 사항 중 하나는 기본 포트 중 일부를 변경할 수 없다는 것입니다. 이는 포트 변경 시 별도의 알림 없이 포트만 변경하는 Docker의 문제입니다. 이는 동일한 컴퓨터에서 여러 개의 Couchbase 인스턴스를 실행할 수 있다는 의미이므로 유용할 수 있습니다. 하지만 안타깝게도 작동하지 않으므로 일부 포트를 수정해야 합니다. 이는 addFixedExposedPort 메서드를 사용하여 TestContainers에서 매우 쉽게 선언할 수 있습니다.

이 문제를 해결하면 Java SDK가 N1QL에 연결할 수 있게 됩니다.

추상 Spring 데이터 카우치베이스 도커 테스트 사례

여기서 목표는 Couchbase 인스턴스와 Spring 데이터 Couchbase를 구성해야 하는 모든 클래스에서 사용할 추상 테스트 케이스를 만드는 것입니다. 이전 게시물에서와 마찬가지로 CouchbaseContainer 필드를 인스턴스화하여 시작합니다. Spring 데이터를 테스트하고 있으므로 인덱스, 쿼리에 대한 지원을 구성하고 나중에 FTS를 추가해 보겠습니다.

이 클래스가 애플리케이션에 대한 테스트를 실행하도록 하려면, 이 클래스에 @RunWith(SpringRunner.class) 어노테이션을 추가하세요. 또한 애플리케이션 구성이 사용자 지정 구성뿐만 아니라 테스트되었는지 확인하려면 스프링 부트 테스트(클래스 = {GittalentBackendApplication.class, AbstractSPDataTestConfig.CouchbaseTestConfig.class}).

이제 사용자 지정 구성에 대해 이야기하자면 무엇이 필요할까요? 앱의 기본 Couchbase 구성을 재정의하고 싶습니다. 그러기 위해서는 CouchbaseConfigurer를 구현해야 합니다. 이 인터페이스는 스프링 데이터 카우치베이스가 제대로 작동하는 데 필요한 모든 빈을 정의합니다. 이 인터페이스는 CouchbaseEnvironment, ClusterInfo, Cluster 및 Bucket에 대한 인스턴스를 제공합니다.

테스트를 실행하기 전에 모두 CouchbaseContainer 설정에서 가져옵니다. 따라서 모든 빈을 초기화하기 전에 컨테이너가 실행 중이고 준비되었는지 확인해야 합니다. 이는 @PostConstruct로 어노테이션된 init() 메서드를 추가하여 수행할 수 있습니다. 이렇게 하면 먼저 컨테이너가 실행 중인지 확인한 다음 추가 사항을 설정할 수 있습니다. 다음 예제에서는 default라는 버킷을 설정하고 인덱스 유형을 MOI로 설정합니다.

이 추상적인 테스트 케이스가 만들어지면, 다음으로 해야 할 일은 이를 확장하는 클래스를 만들고 테스트를 작성하는 것입니다! 여기에서는 애플리케이션의 서비스뿐만 아니라 하위 수준의 버킷도 삽입할 수 있습니다. 이 테스트에서 볼 수 있는 것은 먼저 문서를 생성하는 임포터 서비스에 대한 호출입니다. 그런 다음 기본 버킷에 인덱스를 생성하고 이에 대한 쿼리를 테스트합니다.

추상 테스트 케이스가 생성되면 보시다시피 코드의 양이 매우 적고 테스트하려는 항목과 정확히 일치합니다.

작성자

게시자 로랑 도귄

Laurent는 파리에 사는 괴짜 금속공학도입니다. 주로 Java로 코드를 작성하고 AsciiDoc으로 구조화된 텍스트를 작성하며 데이터, 리액티브 프로그래밍 및 기타 유행어에 대해 자주 이야기합니다. 또한 Clever Cloud와 Nuxeo의 개발자 옹호자로 활동하며 해당 커뮤니티가 더 크고 강력하게 성장할 수 있도록 자신의 시간과 전문성을 바쳤습니다. 현재 Couchbase에서 개발자 관계를 운영하고 있습니다.

댓글 하나

  1. [...] 카우치베이스 개발자 옹호자 로랑 도귄이 테스트 컨테이너와 스프링으로 스프링 데이터 카우치베이스 애플리케이션을 테스트하는 방법을 정리했습니다 [...]

  2. 드리저 드리저 8월 25, 2018에서 8:34 오후

    안녕하세요,

    Abstract 클래스를 확장하는 여러 파일을 만들 때 문제가 발생하고 있습니다.

    옆에서 해보실 수 있나요? 내가 뭔가 잘못하고 있는 건 아닌지...

    미리 감사드립니다,

    감사합니다,

댓글 남기기