paint-brush
Execute facilmente bancos de dados locais usando C# Testcontainers para MongoDBpor@devleader
273 leituras

Execute facilmente bancos de dados locais usando C# Testcontainers para MongoDB

por Dev Leader7m2024/04/02
Read on Terminal Reader

Muito longo; Para ler

Neste artigo, apresentarei os conceitos básicos de Testcontainers. A partir daí, demonstrarei como é simples interagir com seu banco de dados recém-criado por meio do pacote C# MongoDB.Driver NuGet — quase como se você nem soubesse que havia um contêiner ativado! Vamos mergulhar nisso.
featured image - Execute facilmente bancos de dados locais usando C# Testcontainers para MongoDB
Dev Leader HackerNoon profile picture
0-item

Neste artigo, vou guiá-lo através de Testcontainers C# para MongoDB! Adoro usar Testcontainers para trabalhar com banco de dados local quando não quero pensar em gerenciar a sobrecarga de ativar e desativar um banco de dados ou gerenciar algo na nuvem. O MongoDB não é exceção aqui, pois o pacote C# Testcontainers NuGet que temos para o MongoDB é um sonho para trabalhar.


Neste artigo, apresentarei os conceitos básicos de Testcontainers. A partir daí, demonstrarei como é simples interagir com seu banco de dados recém-criado por meio do pacote C# MongoDB.Driver NuGet — quase como se você nem soubesse que havia um contêiner ativado! Vamos mergulhar nisso.


Visão geral dos contêineres de teste C#

Testcontainers é um pacote NuGet incrível que pode aprimorar muito seu fluxo de trabalho de teste e desenvolvimento local ao criar aplicativos .NET. Ele fornece uma maneira simples e eficaz de gerenciar contêineres Docker, permitindo que você crie instâncias leves e isoladas e desmonte-as como se nada tivesse acontecido!


Isso significa que com Testcontainers você não precisa mais se preocupar em configurar e desmontar bancos de dados de teste ou em lidar com arquivos de configuração complexos. Ele cuida de todos os detalhes do gerenciamento de contêineres, fazendo com que esse processo pareça trivial — com certeza não gostaria de lidar com isso manualmente.


Alguns dos principais benefícios do Testcontainers incluem:

  • Sua capacidade de fornecer um ambiente de teste consistente e reproduzível. Você pode definir a versão e a configuração exatas do serviço necessárias, garantindo que os resultados dos testes sejam confiáveis e consistentes em diferentes ambientes.


  • A velocidade e flexibilidade que ele traz ao seu fluxo de trabalho de teste e desenvolvimento. Ao usar contêineres Docker leves, você pode ativar e desativar rapidamente ambientes de teste sob demanda. Não é necessário configurar a nuvem ou recursos compartilhados antecipadamente... Apenas uma grandiosidade instantânea.


  • Integração perfeita com estruturas e ferramentas de teste existentes no ecossistema DotNet, como Xunit, NUnit e BenchmarkDotNet. Isso permite incorporar facilmente instâncias de serviço em contêineres em seus conjuntos de testes existentes, sem grandes modificações.


Neste artigo, focaremos em como podemos usar C# Testcontainers para MongoDB em particular. Muitos dos conselhos abordados aqui serão aplicáveis a outros serviços, especialmente bancos de dados, mas manteremos nossos olhos voltados para o MongoDB.


Configurando contêineres de teste em C#

Para começar a usar Testcontainers em C#, você precisará instalar e configurar as dependências necessárias em seu projeto. Siga as etapas abaixo para configurar Testcontainers para MongoDB em C#.

1. Instalando contêineres de teste

Geralmente, a primeira etapa seria instalar o pacote Testcontainers NuGet em seu projeto C#. Você abriria o Console do Gerenciador de Pacotes NuGet e executaria o seguinte comando:

 Install-Package Testcontainers


No entanto, precisamos do tipo MongoDB deste pacote (estou usando a versão 3.8.0 no momento em que escrevo), que inclui o pacote básico Testcontainers. Você pode instalá-lo através da interface de usuário do gerenciador de pacotes ou com este comando:

 Install-Package Testcontainers.MonogoDB

2. Configurando Testcontainers para MongoDB

Depois de instalar o Testcontainers, você precisa configurá-lo para o MongoDB. Isso envolve a configuração de um contêiner MongoDB com as configurações necessárias. Aqui está um exemplo de como você pode configurar Testcontainers para MongoDB em C#:

 using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build();


No exemplo acima, criamos uma nova instância do MongoDbBuilder e especificamos a imagem do MongoDB e a ligação da porta. O método WithImage define a imagem para o contêiner MongoDB, portanto, usar “mongo:latest” sempre extrairá a imagem mais recente.


Opcionalmente, poderíamos usar port binding para configurar quais portas queremos usar explicitamente:

 using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .WithPortBinding(1337, 27017) .Build();


O código acima usa o método WithPortBinding para vincular a porta 27017 do contêiner à porta 1337 da máquina host. Veremos nas próximas seções que, a menos que você tenha uma necessidade específica de vincular portas, você pode simplesmente deixar isso como está. Podemos obter uma string de conexão dinâmica, o que é muito conveniente!

3. Iniciando e Parando o Contêiner MongoDB

Depois de configurar Testcontainers para MongoDB, você pode iniciar e parar o contêiner conforme necessário. Aqui estão exemplos de código para iniciar e parar o contêiner:


Para iniciar o contêiner MongoDB:

 await container.StartAsync();


Para parar o contêiner MongoDB:

 await _container.StopAsync();


Lembre-se de que o tipo MongoDbContainer pode ser descartado, então chame DisposeAsync para limpar quando estiver pronto.


Usando C# Testcontainers para MongoDB na prática

Agora que vimos como girar e desmontar contêineres, o que devemos fazer com eles? Temos muitas opções e, na verdade, o limite é a sua imaginação (e tempo, dinheiro e outros recursos…)!


A maioria das pessoas utiliza Testcontainers C# para escrever testes funcionais ou de integração. Você pode combinar Testcontainers com xUnit ou NUnit, por exemplo, e escrever testes que interajam com um banco de dados real.


Para mim, eu precisava conectar Testcontainers C# para MongoDB até BenchmarkDotNet para poder comparar a inserção de registros no MongoDB ! Um caso de uso semelhante em que eu precisava de bancos de dados locais temporários, mas não necessariamente para uma estrutura de teste.


Independentemente disso, precisamos ser capazes de nos conectar a esses contêineres de banco de dados MongoDB a partir de C#, e as próximas subseções cobrirão isso.

Conectando-se a C# Testcontainers para MongoDB com MongoDB.Driver

Vamos supor que você leu as seções anteriores e tem o pacote MongoDB correto instalado para Testcontainers. Se você leu esta seção, volte, leia e obtenha o pacote certo. Caso contrário, você estará coçando a cabeça pensando por que não consegue encontrar as dependências certas!


Você também precisará instalar o pacote MongoDB.Driver NuGet. Isso é o que usaremos para estabelecer uma conexão com o contêiner de banco de dados que criamos. Tenho outros artigos que você pode ler se quiser mais explicações sobre como o MongoDB.Driver funciona em geral:


Com os pacotes certos prontos, podemos combinar o código que vimos anteriormente com algum código de driver MongoDB para unir as coisas:

 using MongoDB.Bson; using MongoDB.Driver; using Testcontainers.MongoDb; MongoDbContainer container = new MongoDbBuilder() .WithImage("mongo:latest") .Build(); await container.StartAsync(); string connectionString = container.GetConnectionString(); MongoClient mongoClient = new MongoClient(connectionString); IMongoDatabase database = mongoClient.GetDatabase("test"); IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("test");


No exemplo acima, podemos chamar GetConnectionString() no contêiner MongoDB recém-criado em Testcontainers. A parte incrível disso é que não importa como você configura seu Testcontainer para MongoDB usando o padrão de construtor que vemos neste código e no início do artigo, GetConnectionString() fornecerá o que você precisa para se conectar.


Como MongoClient aceita uma string de conexão como um único argumento, é trivial obter acesso ao banco de dados MongoDB para começar a trabalhar com ele imediatamente!

Executando operações CRUD no MongoDB Testcontainer

Agora que temos nosso MongoDB Testcontainer configurado e um MongoClient conectado a ele, podemos começar a realizar operações CRUD nele. Os detalhes da conexão fornecidos pela instância do contêiner facilitaram a combinação dessas duas coisas e, na verdade, podemos nos concentrar apenas nas chamadas do método MongoDB.Driver para CRUD.


Aqui está um exemplo de execução de uma operação CRUD simples:

 // using code from earlier examples... // Create await collection.InsertOneAsync(new BsonDocument() { ["Name"] = "Nick Cosentino", }); // Read var filterBuilder = Builders<BsonDocument>.Filter; var filter = filterBuilder.Eq("Name", "Nick Cosentino"); var results = collection.Find(filter); // Update var updateBuilder = Builders<BsonDocument>.Update; var update = updateBuilder.Set("Name", "Dev Leader"); collection.UpdateOne(filter, update); // Delete filter = filterBuilder.Eq("Name", "Dev Leader"); collection.DeleteOne(filter);


Usando os trechos de código anteriores, já estávamos funcionando com nossa instância de contêiner MongoDB e um MongoClient . Como resultado, você pode ver no trecho de código acima que podemos trabalhar diretamente com nosso IMongoCollection<BsonDocument> que obtivemos na configuração anterior.


Isso ajuda a ilustrar que, depois de ter o contêiner docker MongoDB instalado e funcionando por meio de Testcontainers, você não precisa tratar as coisas de maneira especial depois de se conectar a ele!


Concluindo testcontainers C# para MongoDB

Para concluir, C# Testcontainers for MongoDB é uma maneira incrivelmente simples de colocar um armazenamento de dados transitório do MongoDB em funcionamento para testes e desenvolvimento. Embora este artigo não tenha se concentrado em casos de uso específicos, esperamos que você tenha uma melhor compreensão de como é transparente colocar um driver MongoDB em cima de Testcontainers para interagir com o MongoDB.


Dado que o C# Testcontainers elimina a dor de cabeça da configuração, desmontagem e até mesmo do gerenciamento da cadeia de conexão, é uma recomendação fácil minha se você quiser começar a usar o MongoDB para uso local.


Se você achou isso útil e está procurando mais oportunidades de aprendizado, considere assinar meu boletim informativo semanal gratuito sobre engenharia de software e conferir meus vídeos gratuitos no YouTube !


Também publicado aqui