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).