1. ホーム
  2. c#

特定のSPTimeZoneインスタンスを作成または取得する

2023-11-07 19:14:08

質問

の特定のインスタンスを作成する最も便利な方法は何ですか? Microsoft.SharePoint.SPTimeZone を次のようにします。

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

このハックがベストでしょうか...。

私はユニットテストのためにコードのこの部分をモックし、常にUTCを返すように強制したいので、これは特に私にとっての問題です。プロパティ GlobalTimeZones に依存しているようです。 HttpContext.Current または実際のリクエストに依存しているようです - 私のUnit Testsにはない前提条件ですが...。

N.B.: 私は System.TimeZoneInfo があることは知っていますが、サードパーティのアセンブリによって、SPTimeZoneを使わざるを得ないのです ...

どのように解決するのですか?

この議論を止めるために、私は最終的に自分でこの質問に答えることにしました。

コメントには本当に役に立つ解決策がいくつかあり、この短い答えに集めたいと思います。

  • ファサード/アダプターを導入する
  • MS Fakesや他のフレームワークを
    • SPTimeZone への偽のアクセス
    • 偽の HttpContext を作成する
  • 上の質問で説明されたハックと一緒に行く...

私自身は、MSFakes を使用してサードパーティーの呼び出し全体をシムし (とにかくその動作をテストしたくなかったので)、私のメソッドで使用する SPTimeZone のすべてのプロパティをシムすることに決めました。内部)API を維持しなければならなかったので、アダプターを導入することは残念ながら私にとって選択肢ではありませんでした。