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:
- Agregue un nuevo archivo appsettings.json a su proyecto de prueba con todas las configuraciones que necesita.
- Instale el paquete: Microsoft.Extensions.DependencyInjection.
-
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; -
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.