Saltar al contenido

App.config para Xunit

Este dilema se puede solucionar de diferentes formas, pero te damos la que en nuestra opinión es la resolución más completa.

Solución:

Si su código asume que están en el app.configentonces xUnit.net admite tenerlos conectados allí al proporcionar uno (generalmente cuando las pruebas están en un archivo DLL, esto significa que obtiene un AssemblyName.dll.config archivo en las salidas del proyecto que el corredor carga como la configuración si existe en el momento de la carga).

Obviamente, no hay daño en usar el principio DI para eliminar tales dependencias en primer lugar, pero yo diría que no juegues con el código antes de que lo pruebes primero.

Para mantenerlo SECO, coloque app.config en un lugar central y agréguelo como un enlace (a través de la flecha en el botón Abrir en el cuadro de diálogo). (Sí, hay muchas cosas que no me gustan de eso; úselo solo si siente que es el enfoque menos malvado).


Una cosa a tener en cuenta es que los cambios no se vuelven a cargar en el ejecutor de GUI a menos que solicite que se vuelva a cargar el ensamblaje.

Desde la perspectiva de proyectos más complejos y trabajo en equipo, recomiendo:

  1. .config separado archivo para el proyecto xUnit (aprovecha la configuración y el registro independientes para ejecutar pruebas)
  2. configuraciónInyección de dependencia Juntos con lectura de .config solo para el proyecto xUnit

Nuestro equipo está usando este patrón de xUnit iniciar y desechar:

    public class MyTest : IDisposable
    
        public IServiceProvider Services  get; private set; 
        public MyProjectOptions Options  get; private set; 
        public Logger Logger  get; private set; 

        private void Configure()
        
            // appsettings.workspace.json for custom developer configuration
            var configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .AddJsonFile("appsettings.workspace.json", optional: true)
                .Build();

            Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .WriteTo.LiterateConsole()
                .WriteTo.RollingFile("logs/Date-log.txt")
                .CreateLogger();

            Options = configuration.GetSection("MyProject").Get();

            var services = new ServiceCollection();
            services.AddSingleton(s => Logger);
            // other DI logic and initializations ...
            //services.AddTransient(x => ...);

            Services = services.BuildServiceProvider();
        

        public MyTest()
        
            Configure();

            // ... initialize data in the test database ...
            var data = Services.GetService();
            data.Clean();
            data.SeedData();
        

        public void Dispose()
        
            // ... clean-up data in the test database ...
            var data = Services.GetService();
            data.Clean();
        
    

Calificaciones y comentarios

Más adelante puedes encontrar las críticas de otros desarrolladores, tú igualmente eres capaz mostrar el tuyo si te gusta.

¡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 *