创建或获取特定的 SPTimeZone 实例

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

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

这是我能找到的最好的黑客。

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

注意: 我知道有 System.TimeZoneInfo,但是第三方组装迫使我使用 SPTimeZone..。

1553 次浏览

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

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

  • 引入外观/适配器
  • 微软伪造或其他框架,以
    • 假冒进入 SPTimeZone
    • 创建一个假的 HttpContext
  • 用上述问题中描述的黑客手段... ..。

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