Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

216
Vistas
Cómo actualizar HttpConfiguration DESPUÉS de la creación de Owin TestServer

La configuración de http se establece en la clase de inicio, por lo general, que está vinculada al método Create.

Pero, ¿qué pasa si quiero iniciar un servidor owin UNA vez para TODAS las pruebas pero actualizar su configuración http según las necesidades de cada prueba?

Esto no es posible. El objeto del servidor no tiene nada útil.

 using (var server = TestServer.Create<Startup>()) { var data = server.HttpClient.GetAsync("/api/data); }

Lo que quiero hacer para las pruebas de integración CRUD es agregar los métodos de servicio

 // Do it ONE time fall ALL tests WebApiConfig.Register(config); WebServicesConfig.Register(config); // Do it individually for each test, Update DI registerations with Fake components per test method var builder = new ContainerBuilder(); var mockContext = new Mock<TGBContext>(); var mockService = new Mock<SchoolyearService>(mockContext.Object); mockService.Setup<Task<IEnumerable<SchoolyearDTO>>>(c => c.GetSchoolyearsAsync()).Returns(Task.FromResult(Enumerable.Empty<SchoolyearDTO>())); // builder.RegisterInstance<TGBContext>(); ****** NO NEED for this it works without registering the ctor parameter dependency builder.RegisterInstance<SchoolyearService>(mockService.Object); builder.Update(((AutofacWebApiDependencyResolver)config.DependencyResolver).Container as IContainer);

Por el momento me veo obligado a crear un TestServer por método de prueba.

Eso es una sobrecarga total en el tiempo.

SOLUCIÓN

Haga que HttpConfiguration sea estático y este código debería funcionar:

 var builder = new ContainerBuilder(); var mockContext = new Mock<TGBContext>(); var mockService = new Mock<SchoolyearService>(mockContext.Object); mockService.Setup<Task<IEnumerable<SchoolyearDTO>>>(c => c.GetSchoolyearsAsync()).Returns(Task.FromResult(Enumerable.Empty<SchoolyearDTO>())); builder.RegisterInstance<SchoolyearService>(mockService.Object); builder.Update(((AutofacWebApiDependencyResolver)Configuration.DependencyResolver).Container as IContainer);
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

si desea iniciar el servidor OWIN una vez para todas las pruebas.

  1. declarar una clase base para todas sus clases de prueba
  2. declare una variable estática privada de solo lectura en su clase base para el servidor OWIN.

private static readonly TestServer _webServer = TestServer.Create<Startup>();

  1. declare una variable estática protegida para exponer este servidor a todas las pruebas.

protected static TestServer WebServer { get { return _webServer; } }

esto debería resolver su problema de instanciar el servidor web solo una vez para todas las ejecuciones de prueba. y si no desea inicializar el servidor web tan temprano, puede usar la creación de instancias perezosas, etc., pero el punto es hacerlo estático e inicializarlo en el momento de la definición, de modo que sea una vez por dominio de la aplicación.

en cuanto a obtener acceso a HttpConfiguration en sus pruebas unitarias... aquí hay una forma posible...

  1. en su Startup.cs, declare una propiedad pública...

public static HttpConfiguration HttpConfiguration { get; private set; }

  1. inicialice esta variable en el método de configuración de la clase Startup.cs.

     HttpConfiguration = new HttpConfiguration(); HttpConfiguration.MapHttpAttributeRoutes(); // do more stuff.. setting resolver etc. // and then finally app.UseWebApi(HttpConfiguration);
  2. Esta propiedad HttpConfiguration es la configuración de su API web y debido a que la convertimos en una propiedad pública, debe ser accesible en su proyecto de prueba y para todas las pruebas.

     Startup.HttpConfiguration

puede acceder a él para modificar las definiciones de resolución de dependencia, etc.

 Startup.HttpConfiguration.DependencyResolver

tenga en cuenta que puede actualizar las definiciones de DependencyResolver incluso después de inicializar el servidor web... las definiciones actualizadas seguirán teniendo su efecto.

  1. Si le preocupa que su HttpConfiguration esté disponible públicamente, haga que la clase Startup sea interna y que sea visible solo para su proyecto de prueba de unidad.
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda