Package Description
$ dotnet add package Reo.Core.IntegrationTestingReo.Core.IntegrationTesting — это библиотека для упрощения написания интеграционных тестов в .NET-приложениях. Она предоставляет фикстуры для работы с различными системами (PostgreSQL, Redis, MongoDB, Elasticsearch), автоматизирует настройку и очистку тестовых данных, а также интегрируется с Moq.AutoMock для создания мок-объектов.
Решает следующие проблемы:
Основные функции:
| Компонент | Описание |
|---|---|
PostgresFixture<TDbContext> | Фикстура для настройки PostgreSQL в тестах. Предоставляет DbContext и обрабатывает инициализацию/очистку БД. |
ElasticFixture | Фикстура для работы с Elasticsearch. Обеспечивает доступ к клиенту Elasticsearch и настройку индексов. |
RedisFixture | Фикстура для тестирования Redis. Создаёт и удаляет тестовые ключи в кэше. |
MongoFixture | Фикстура для MongoDB. Обеспечивает доступ к клиенту MongoDB и управление коллекциями. |
AutoMockerExtensions | Методы расширения для настройки Moq.AutoMock с фикстурами. |
TestFramework | Модуль, управляющий жизненным циклом тестовых ресурсов (инициализация, очистка). |
Используйте следующие команды для установки пакета:
NuGet Package Manager:
Install-Package Reo.Core.IntegrationTesting
.NET CLI:
dotnet add package Reo.Core.IntegrationTesting
Добавьте сервисы в Startup.cs или Program.cs:
services.AddIntegrationTestingServices(); // Если есть кастомные настройки
Укажите параметры в appsettings.json или через AddSingleton:
{
"Testcontainers": {
"Postgres": {
"Image": "postgres:15",
"Username": "test",
"Password": "test"
},
"Mongo": {
"Image": "mongo:5.0",
"Username": "test",
"Password": "test"
}
}
}
[Fact]
public async Task TestWithPostgres()
{
// Arrange
var fixture = new PostgresFixture<MyDbContext>();
var dbContext = fixture.CreateContext();
// Act
await dbContext.MyEntities.AddAsync(new MyEntity { Name = "Test" });
await dbContext.SaveChangesAsync();
// Assert
var result = await dbContext.MyEntities.FirstOrDefaultAsync();
Assert.NotNull(result);
Assert.Equal("Test", result.Name);
}
[Fact]
public async Task TestWithElasticsearch()
{
// Arrange
var fixture = new ElasticFixture();
var client = fixture.Client;
// Act
await client.IndexAsync(new { Id = 1, Name = "Test" }, idx => idx.Index("test-index"));
// Assert
var result = await client.SearchAsync<TestDocument>(s => s
.Index("test-index")
.Query(q => q.Match(m => m.Field("name").Query("Test"))));
Assert.Single(result.Documents);
}
var mocker = new AutoMocker();
mocker.SetupPostgres<MyDbContext>(fixture); // Для PostgreSQL
var service = mocker.CreateInstance<MyService>();
service.DoSomething(); // Тест логики, зависящей от БД
Reo.Core.IntegrationTesting распространяется под лицензией MIT License. Используйте его в своих проектах, не забывая указывать авторство.
Разработано с любовью для тестирования сложных систем! 🚀