paint-brush
Легко запускайте локальные базы данных с помощью тестовых контейнеров C# для MongoDBк@devleader
273 чтения

Легко запускайте локальные базы данных с помощью тестовых контейнеров C# для MongoDB

к Dev Leader7m2024/04/02
Read on Terminal Reader

Слишком долго; Читать

В этой статье я познакомлю вас с основами тестконтейнеров. Далее я продемонстрирую, насколько просто взаимодействовать с вашей вновь созданной базой данных через пакет NuGet C# MongoDB.Driver — почти так, как будто вы даже не подозреваете, что был развернут контейнер! Давайте углубимся в это.
featured image - Легко запускайте локальные базы данных с помощью тестовых контейнеров C# для MongoDB
Dev Leader HackerNoon profile picture
0-item

В этой статье я расскажу вам о тестовых контейнерах C# для MongoDB! Мне нравится использовать Testcontainers для работы с локальной базой данных, когда я не хочу думать об управлении накладными расходами на развертывание и удаление базы данных или об управлении чем-то в облаке. MongoDB здесь не является исключением, поскольку пакет C# Testcontainers NuGet, который у нас есть для MongoDB, — это просто мечта работать.


В этой статье я познакомлю вас с основами тестконтейнеров. Далее я продемонстрирую, насколько просто можно взаимодействовать с вашей вновь созданной базой данных через пакет NuGet C# MongoDB.Driver — почти так, как будто вы даже не подозреваете, что был развернут контейнер! Давайте углубимся в это.


Обзор тест-контейнеров C#

Testcontainers — это потрясающий пакет NuGet, который может значительно улучшить рабочий процесс тестирования и локальной разработки при создании приложений .NET. Он предоставляет простой и эффективный способ управления контейнерами Docker, позволяя вам разворачивать легкие и изолированные экземпляры и разбирать их, как будто ничего не произошло!


Это означает, что с Testcontainers вам больше не придется беспокоиться о настройке и удалении тестовых баз данных или работе со сложными файлами конфигурации. Он обрабатывает все детали управления контейнерами, что делает этот процесс тривиальным — я бы точно не хотел делать это вручную.


Некоторые из ключевых преимуществ Testcontainers включают в себя:

  • Его способность обеспечивать согласованную и воспроизводимую тестовую среду. Вы можете определить точную версию и конфигурацию службы, которая вам нужна, гарантируя, что результаты ваших тестов будут надежными и согласованными в различных средах.


  • Скорость и гибкость, которые он привносит в рабочий процесс тестирования и разработки. Используя легкие контейнеры Docker, вы можете быстро разворачивать и отключать тестовые среды по требованию. Никакой предварительной настройки облака или общих ресурсов… Просто потрясающая возможность «на лету».


  • Бесшовная интеграция с существующими платформами и инструментами тестирования в экосистеме DotNet, такими как Xunit, NUnit и BenchmarkDotNet. Это позволяет вам легко включать экземпляры контейнерных сервисов в существующие наборы тестов без каких-либо серьезных модификаций.


В этой статье мы сосредоточимся на том, как мы можем использовать тестовые контейнеры C#, в частности, для MongoDB. Большая часть советов, изложенных здесь, будет применима и к другим сервисам, особенно к базам данных, но мы остановимся на MongoDB.


Настройка тестовых контейнеров в C#

Чтобы начать работу с Testcontainers на C#, вам необходимо установить и настроить необходимые зависимости в вашем проекте. Выполните следующие действия, чтобы настроить тестовые контейнеры для MongoDB на C#.

1. Установка тестовых контейнеров

Как правило, первым шагом будет установка пакета NuGet Testcontainers в ваш проект C#. Вы должны открыть консоль диспетчера пакетов NuGet и выполнить следующую команду:

 Install-Package Testcontainers


Однако нам нужна версия этого пакета MongoDB (на момент написания я использую версию 3.8.0), которая включает базовый пакет Testcontainers. Вы можете установить его через пользовательский интерфейс менеджера пакетов или с помощью этой команды:

 Install-Package Testcontainers.MonogoDB

2. Настройка тестовых контейнеров для MongoDB

После установки Testcontainers вам необходимо настроить его для MongoDB. Это включает в себя настройку контейнера MongoDB с необходимыми настройками. Вот пример того, как вы можете настроить Testcontainers для MongoDB на C#:

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


В приведенном выше примере мы создаем новый экземпляр MongoDbBuilder и указываем образ MongoDB и привязку порта. Метод WithImage устанавливает изображение для контейнера MongoDB, поэтому использование «mongo:latest» всегда будет извлекать самое последнее изображение.


При желании мы могли бы использовать привязку портов, чтобы явно указать, какие порты мы хотим использовать:

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


В приведенном выше коде используется метод WithPortBinding который привязывает порт контейнера 27017 к порту хост-машины 1337. В следующих разделах мы увидим, что, если у вас нет особой необходимости привязывать порты, вы можете просто оставить это как есть. Мы можем получить динамическую строку подключения, что очень удобно!

3. Запуск и остановка контейнера MongoDB.

После настройки тестовых контейнеров для MongoDB вы можете запускать и останавливать контейнер по мере необходимости. Вот примеры кода для запуска и остановки контейнера:


Чтобы запустить контейнер MongoDB:

 await container.StartAsync();


Чтобы остановить контейнер MongoDB:

 await _container.StopAsync();


Помните, что тип MongoDbContainer можно удалить, поэтому вызовите DisposeAsync для очистки, когда будете готовы.


Использование тестовых контейнеров C# для MongoDB на практике

Теперь, когда мы узнали, как раскручивать и сносить контейнеры, что нам с ними делать? У нас есть много вариантов, и действительно, пределом является ваше собственное воображение (а также время, деньги и другие ресурсы…)!


Большинство людей используют тест-контейнеры C# для написания интеграционных или функциональных тестов . Например, вы можете сопоставить Testcontainers с xUnit или NUnit и написать тесты, которые взаимодействуют с реальной базой данных.


Мне нужно было подключить тестовые контейнеры C# для MongoDB к BenchmarkDotNet, чтобы я мог протестировать вставку записей в MongoDB ! Аналогичный вариант использования, когда мне нужны были временные локальные базы данных, но не обязательно для тестовой среды.


В любом случае нам нужна возможность подключаться к этим контейнерам базы данных MongoDB из C#, и это будет рассмотрено в следующих подразделах.

Подключение к тестовым контейнерам C# для MongoDB с помощью MongoDB.Driver

Предположим, вы прочитали предыдущие разделы и у вас установлен правильный пакет MongoDB для тест-контейнеров. Если вы пробежали этот раздел, вернитесь, прочтите его и получите нужный пакет. В противном случае вы будете ломать голову над тем, почему вы не можете найти нужные зависимости!


Вам также потребуется установить пакет NuGet MongoDB.Driver. Это то, что мы собираемся использовать для установления соединения с контейнером базы данных, который мы создали. У меня есть другие статьи, которые вы можете прочитать, если хотите получить дополнительные объяснения о том, как работает MongoDB.Driver в целом:


Имея подходящие пакеты, готовые к работе, мы можем объединить код, который мы видели ранее, с кодом драйвера MongoDB, чтобы объединить все воедино:

 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");


В приведенном выше примере мы можем вызвать GetConnectionString() для только что созданного контейнера MongoDB из Testcontainers. Самое замечательное в этом то, что независимо от того, как вы настраиваете свой Testcontainer для MongoDB, используя шаблон компоновщика, который мы видим в этом коде и ранее в статье, GetConnectionString() предоставит вам все, что вам нужно для подключения.


Поскольку MongoClient принимает строку подключения в качестве единственного аргумента, получить доступ к базе данных MongoDB и сразу начать с ней работать очень просто!

Выполнение операций CRUD в тестовом контейнере MongoDB

Теперь, когда у нас настроен тестовый контейнер MongoDB и подключен к нему MongoClient , мы можем начать выполнять над ним операции CRUD. Детали соединения, предоставленные экземпляром контейнера, позволили легко объединить эти две вещи, и действительно, мы можем сосредоточиться только на вызовах метода MongoDB.Driver для CRUD.


Вот пример выполнения простой операции CRUD:

 // 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);


Используя предыдущие фрагменты кода, мы уже работали с нашим экземпляром контейнера MongoDB и MongoClient . В результате в приведенном выше фрагменте кода вы можете видеть, что мы можем напрямую работать с нашей IMongoCollection<BsonDocument> , полученной в результате предыдущей настройки.


Это помогает проиллюстрировать, что как только у вас есть Docker-контейнер MongoDB, запущенный через Testcontainers, вам не нужно обращаться с чем-то каким-то особым образом после подключения к нему!


Завершение работы с тестовыми контейнерами C# для MongoDB

В заключение отметим, что C# Testcontainers для MongoDB — это невероятно простой способ запустить временное хранилище данных MongoDB для тестирования и разработки. Хотя эта статья не фокусировалась на конкретных вариантах использования, мы надеемся, что вы лучше понимаете, насколько прозрачным является наложение драйвера MongoDB поверх тестовых контейнеров для взаимодействия с MongoDB.


Учитывая, что C# Testcontainers избавляет вас от головной боли, связанной с настройкой, демонтажем и даже управлением строками подключения, я легко рекомендую вам, если вы хотите начать работу с MongoDB для локального использования.


Если вы нашли это полезным и ищете дополнительные возможности для обучения, рассмотрите возможность подписки на мой бесплатный еженедельный информационный бюллетень по разработке программного обеспечения и посмотрите мои бесплатные видео на YouTube !


Также опубликовано здесь