创建Microsoft.SharePoint.SPTimeZone的特定实例的最便捷方法是以下方法:

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

这是我能得到的最好的技巧吗?

这对我来说尤其是个问题,因为我想模拟这部分代码以进行单元测试,并强制其始终返回UTC。 GlobalTimeZones属性似乎取决于HttpContext.Current或实际请求-我在单元测试中没有的先决条件...

N.B:我知道有System.TimeZoneInfo,但是第三方程序集迫使我使用SPTimeZone ...

最佳答案

为了停止讨论,我决定最终自己回答这个问题。

我想在简短的回答中收集一些真正有用的解决方案:

  • 外观/适配器
  • MS伪造品或其他框架
  • 伪造访问SPTimeZone的
  • 创建一个伪造的HttpContext
  • 和上面问题中描述的hack一起去...

  • 就我而言,我决定使用MSFakes来填充整个第3方 call (因为无论如何我都不想测试其行为),并填充我在方法中使用的SPTimeZone的所有属性。不幸的是,引入适配器对我来说不是一个选择,因为我必须保留(内部)API。

    10-04 13:00