Em um anterior série de postagens em blogs Expliquei como usar TestContainers para seus testes Java Junit. Algumas das questões que não abordamos foram sobre como testar o N1QL, criar seus próprios buckets, índices etc... Esta postagem será sobre a criação de Dados do Spring Couchbase casos de teste e cobrir essas questões que deixamos de lado.

Porta não configurável de fio rígido

Uma das limitações que temos atualmente no Couchbase Server é que você não pode alterar algumas das portas padrão. Esse é um problema com o Docker, pois a alteração das portas é apenas notificada de outra forma. Isso pode ser ótimo porque significa que você pode ter várias instâncias do Couchbase em execução na mesma máquina. Mas, infelizmente, não funcionará, portanto, algumas portas terão de ser corrigidas. Isso pode ser declarado com bastante facilidade com TestContainers usando o método addFixedExposedPort.

Com isso resolvido, nosso Java SDK poderá se conectar ao N1QL.

Caso de teste abstrato do Spring Data Couchbase Docker

O objetivo aqui é criar um caso de teste abstrato que será usado por qualquer classe que precise de uma instância do Couchbase e do Spring Data Couchbase configurado. Ele começa como nos posts anteriores, instanciando um campo CouchbaseContainer. Como estamos testando o Spring Data, configuramos o suporte para Index, Query e vamos incluir o FTS para mais tarde.

Para garantir que essa classe executará testes para seu aplicativo, adicione o parâmetro @RunWith(SpringRunner.class) annotation. E para garantir que a configuração do seu aplicativo seja testada, assim como a nossa configuração personalizada, adicione @SpringBootTest(classes = {GittalentBackendApplication.class, AbstractSPDataTestConfig.CouchbaseTestConfig.class}).

Agora, falando sobre configuração personalizada, do que precisamos? Queremos substituir a configuração padrão do Couchbase do aplicativo. Para isso, precisamos implementar um CouchbaseConfigurer. Essa interface define todo o bean necessário para que o Spring Data Couchbase funcione corretamente. Ela fornece instâncias para CouchbaseEnvironment, ClusterInfo, Cluster e Bucket.

Todos eles virão de nossa configuração do CouchbaseContainer antes da execução dos testes. Portanto, precisamos nos certificar de que o contêiner esteja em execução e pronto antes de inicializar todos os beans. Isso pode ser feito adicionando um método init() anotado com @PostConstruct. Isso nos permitirá primeiro garantir que o contêiner esteja em execução e, em seguida, configurar outras coisas. No exemplo a seguir, configuramos um bucket chamado default e configuramos o tipo de índice como MOI.

Depois que tivermos esse caso de teste abstrato, tudo o que precisamos fazer é criar uma classe que o estenda e começar a escrever testes! Aqui podemos injetar serviços do nosso aplicativo, bem como um Bucket de nível inferior. O que você vê nesse teste é primeiro uma chamada para um serviço de importação que cria documentos. Em seguida, criamos um índice no bucket padrão e testamos uma consulta nele.

Como você pode ver, depois que o caso de teste abstrato é criado, a quantidade de código é realmente mínima e corresponde exatamente ao que você deseja testar.

Autor

Postado por Laurent Doguin

Laurent é um nerd metaleiro que mora em Paris. Em sua maior parte, ele escreve código em Java e texto estruturado em AsciiDoc, e frequentemente fala sobre dados, programação reativa e outras coisas que estão na moda. Ele também foi Developer Advocate do Clever Cloud e do Nuxeo, onde dedicou seu tempo e experiência para ajudar essas comunidades a crescerem e se fortalecerem. Atualmente, ele dirige as Relações com Desenvolvedores na Couchbase.

2 Comentários

  1. [Laurent Doguin, defensor dos desenvolvedores do Couchbase, elaborou uma boa visão sobre como testar aplicativos Spring Data Couchbase com Contêineres de Teste e Spring [...]

  2. dreaser dreaser agosto 25, 2018 em 8:34 pm

    Olá,

    Estou tendo problemas ao criar vários arquivos que estendem a classe Abstract.

    Você pode tentar em seu lado? Veja se há algo que estou fazendo errado...

    Desde já, obrigado,

    Atenciosamente,

Deixar uma resposta