Saltar al contenido

¿Cómo puedo usar IConfiguration desde mis pruebas de integración?

Luego de de esta larga recopilación de información solucionamos esta cuestión que pueden tener muchos de nuestros lectores. Te regalamos la solución y nuestro deseo es servirte de mucha ayuda.

Solución:

El archivo appsettings.json está solo en la raíz de mi proyecto de prueba, ¿conoce una manera fácil de obtener la ruta del proyecto actual para que no tenga que codificar ese valor?

Selecciona el Build Action propiedad del archivo a Content por lo que se copiará en el directorio de salida para que se mueva a la papelera durante la prueba y luego puede usar el código de configuración original con el .SetBasePath(Directory.GetCurrentDirectory())

public async Task GetUserShouldReturnOk() 
    var userId = new Guid();
    var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();

    var controller = new MyController(
        new MyRepository(configuration));

    var result = await controller.GetUser(userId);

    Assert.IsType(result);

Creo que es mejor usar la inyección de dependencia en tu proyecto de prueba; para uso futuro.

En su proyecto de prueba:

  1. Agregue un nuevo archivo appsettings.json a su proyecto de prueba con todas las configuraciones que necesita.
  2. Instale el paquete: Microsoft.Extensions.DependencyInjection.
  3. Cree una clase para la configuración de prueba; por ejemplo TestSetup.cs.

    public class TestSetup
    
        public TestSetup()
        
            var serviceCollection = new ServiceCollection();
            var configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(
                     path: "appsettings.json",
                     optional: false,
                     reloadOnChange: true)
               .Build();
            serviceCollection.AddSingleton(configuration);
            serviceCollection.AddTransient();
    
            ServiceProvider = serviceCollection.BuildServiceProvider();
        
    
        public ServiceProvider ServiceProvider  get; private set; 
    
    
  4. En tu clase de prueba; Estoy usando Xunit

    public class MyControllerTest: IClassFixture
    
        private ServiceProvider _serviceProvider;
        private MyController _myController;
    
        public MyControllerTest(TestSetup testSetup)
        
           _serviceProvider = testSetup.ServiceProvider;
           _myController = _serviceProvider.GetService();
        
    
        [Fact]
        public async Task GetUserShouldReturnOk()
        
            var result = await _myController.GetUser(userId);
            Assert.IsType(result);
        
    
    
    

Sección de Reseñas y Valoraciones

Si sostienes algún reparo o disposición de acrecentar nuestro ensayo te inspiramos realizar un exégesis y con mucho gusto lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *