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.config
entonces 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:
- .config separado archivo para el proyecto xUnit (aprovecha la configuración y el registro independientes para ejecutar pruebas)
- 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.