Ontem escrevi sobre Como fazer testes unitários e de integração com o Couchbase e o TestContainers. Um dos pré-requisitos para esses testes era ter uma imagem já criada. Acontece que não é necessário. Você pode usar o TestContainers para criar suas próprias imagens personalizadas antes de executar seus testes, e isso é muito fácil. Graças a Sergei Egorov por me mostrar o caminho!

Criação de imagens em tempo real

No exemplo anterior, uma imagem seria instanciada com o seguinte código:

O construtor GenericContainer receberia apenas uma String como parâmetro. Essa String é o nome do contêiner que você deseja testar. Mas o construtor GenericContainer também aceita um Future. Que, por acaso, é o que a classe ImageFromDockerfile é. A classe Docker será criada de forma assíncrona com os parâmetros que você fornecer.

Aqui, copiei tudo o que precisava na pasta de recursos do meu projeto, o que torna todos eles acessíveis a partir do classpath. É por isso que uso a tag comFileFromClasspath método. Você também pode obter um arquivo a partir de uma cadeia de caracteres, um caminho absoluto ou um arquivo. Você encontrará mais informações sobre isso em Documentação do TestContainers.

E, com isso, sua imagem do Docker será criada automaticamente antes de executar seus testes. Por padrão, as imagens são excluídas na saída, mas você pode passar um sinalizador para manter as imagens e evitar reconstruí-las o tempo todo. Isso realmente depende de sua estratégia de teste.

Solução de problemas

Enquanto escrevia isso, encontrei um pequeno problema. Todos os recursos que foram usados para a criação da imagem perderam suas permissões, então tive que adicionar um EXECUTAR chmod +x em todos os recursos que copio no Dockerfile. Agora, esse é um problema conhecido e as pessoas adoráveis e reativas por trás do TestContainer estão trabalhando nisso. Você pode conversar com eles em seu canal do SlackAssim como você pode conversar com o pessoal do Couchbase em nosso canal comunitário.

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.

Deixar uma resposta