创建或获取特定的SPTimeZone实例

Mar*_*kus 74 c# sharepoint unit-testing sharepoint-2013

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

SPTimeZone utc = SPRegionalSettings.GlobalTimeZones
                                   .OfType<SPTimeZone>()
                                   .FirstOrDefault(tz => tz.Information.Bias == 0
                                                   && tz.Information.DaylightBias == 0);
Run Code Online (Sandbox Code Playgroud)

这个黑客是我能得到的最好的......

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

注意:我知道只有System.TimeZoneInfo第三方组装强迫我使用SPTimeZone ......

Mar*_*kus 5

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

评论中有几个非常有用的解决方案,我想在这个简短的答案中收集:

  • 介绍一个外观/适配器
  • MS Fakes或其他框架
    • 假访问SPTimeZone
    • 创建一个假的HttpContext
  • 与上面问题中描述的黑客一起...

我本人决定使用MSFakes来填充整个第三方调用(因为我无论如何都不想测试它的行为)并且修复我在我的方法中使用的SPTimeZone的所有属性.不幸的是,介绍适配器对我来说不是一个选项,因为我必须保留(内部)API.