Crear u obtener una instancia específica de Stimezone


¿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 hack 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 devolver siempre UTC. La propiedad GlobalTimeZones parece depender de HttpContext.Current o de una solicitud real, un requisito previo que no tengo en mis Pruebas Unitarias...

N.b.: Sé que hay System.TimeZoneInfo pero una asamblea de terceros me obliga a usar Stimezone ...

Author: brainless coder, 2015-05-22

1 answers

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

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

  • Introducción de una fachada / adaptador
  • MS Falsificaciones u otros marcos para
    • acceso falso a stimezone
    • crear un HttpContext falso
  • ir con el hack descrito en la pregunta anterior ...

Yo por mi parte decidí ir con MSFakes a shim toda la llamada 3rd party (ya que no quería probar su comportamiento de todos modos) y shim todas las propiedades de Stimezone que uso en mi método. La introducción de un adaptador desafortunadamente no fue una opción para mí, ya que tuve que preservar la API (interna).

 5
Author: Markus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-17 06:48:27