c# unit-testing sharepoint sharepoint-2013

c# - Crear u obtener una instancia específica de SPTimeZone



unit-testing sharepoint (1)

¿Cuál es la forma más conveniente de crear una instancia específica de Microsoft.SharePoint.SPTimeZone como la siguiente?

SPTimeZone utc = SPRegionalSettings.GlobalTimeZones .OfType<SPTimeZone>() .FirstOrDefault(tz => tz.Information.Bias == 0 && tz.Information.DaylightBias == 0);

¿Es este truco el mejor que puedo conseguir ...

Esto es en particular un problema para mí, ya que me gustaría burlarme de esta parte del código para las pruebas unitarias y forzarlo a que siempre devuelva UTC. La propiedad GlobalTimeZones parece depender de HttpContext.Current o una solicitud real, un requisito previo que no tengo en mis pruebas unitarias ...

NB: Sé que hay System.TimeZoneInfo pero un ensamblado de terceros me obliga a usar SPTimeZone ...


Para detener la discusión, decidí finalmente responder esta pregunta por mi cuenta.

Hay varias soluciones realmente útiles en los comentarios que quiero reunir en esta breve respuesta:

  • Introducir una fachada / adaptador
  • MS Fakes u otros marcos para
    • acceso falso a SPTimeZone
    • crear un falso HttpContext
  • Ir con el truco descrito en la pregunta anterior ...

Por mi parte, decidí ir con MSFakes para eliminar toda la llamada de terceros (ya que de todos modos no quería probar su comportamiento) y eliminar todas las propiedades de SPTimeZone que uso en mi método. Lamentablemente, presentar un adaptador no era una opción para mí, ya que tenía que preservar la API (interna).