Escribe pruebas con Testcontainers
Tabla de contenidos
Añadir dependencias de Testcontainers
Añade el módulo de Testcontainers PostgreSQL al proyecto de pruebas:
$ dotnet add ./CustomerService.Tests/CustomerService.Tests.csproj package Testcontainers.PostgreSql
Escribir la prueba
Crea CustomerServiceTest.cs en el proyecto de pruebas:
using Testcontainers.PostgreSql;
namespace Customers.Tests;
public sealed class CustomerServiceTest : IAsyncLifetime
{
private readonly PostgreSqlContainer _postgres = new PostgreSqlBuilder()
.WithImage("postgres:16-alpine")
.Build();
public Task InitializeAsync()
{
return _postgres.StartAsync();
}
public Task DisposeAsync()
{
return _postgres.DisposeAsync().AsTask();
}
[Fact]
public void ShouldReturnTwoCustomers()
{
// Given
var customerService = new CustomerService(new DbConnectionProvider(_postgres.GetConnectionString()));
// When
customerService.Create(new Customer(1, "George"));
customerService.Create(new Customer(2, "John"));
var customers = customerService.GetCustomers();
// Then
Assert.Equal(2, customers.Count());
}
}Esto es lo que hace la prueba:
- Declara un
PostgreSqlContainerusando elPostgreSqlBuildercon la imagen de Dockerpostgres:16-alpine. - Implementa
IAsyncLifetimepara la gestión del ciclo de vida del contenedor:InitializeAsync()inicia el contenedor antes de que se ejecute la prueba.DisposeAsync()detiene y elimina el contenedor después de que la prueba finaliza.
ShouldReturnTwoCustomers()crea unCustomerServicecon los detalles de conexión del contenedor, inserta dos clientes, obtiene todos los clientes y verifica la cantidad.