Créer ou obtenir une instance spécifique de SPTimeZone

Quelle est la manière la plus pratique de créer une instance spécifique de Microsoft.SharePoint.SPTimeZone comme suit:

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

Est-ce que ce hack est le meilleur que je puisse obtenir …

C’est particulièrement un problème pour moi, car je voudrais me moquer de cette partie du code pour les tests unitaires et la forcer à toujours renvoyer l’UTC. La propriété GlobalTimeZones semble dépendre de HttpContext.Current ou d’une requête réelle – une condition préalable que je n’ai pas dans mes tests unitaires …

NB: Je sais qu’il existe System.TimeZoneInfo mais un assemblage tiers me force à utiliser SPTimeZone …

Pour arrêter la discussion, j’ai décidé de répondre à cette question par moi-même.

Il y a plusieurs solutions vraiment utiles dans les commentaires que je veux rassembler dans cette réponse courte:

  • Présentation d’une façade / adaptateur
  • MS Fakes ou d’autres frameworks pour
    • faux access à SPTimeZone
    • créer un faux HttpContext
  • aller avec le hack décrit dans la question ci-dessus …

J’ai pour ma part décidé d’aller avec MSFakes pour caler tout l’appel de tiers (puisque je ne voulais pas tester son comportement de toute façon) et pour modifier toutes les propriétés de SPTimeZone que j’utilise dans ma méthode. L’introduction d’un adaptateur n’était malheureusement pas une option pour moi, car je devais conserver l’API (interne).