Создайте или получите конкретный экземпляр SPTimeZone
Каков наиболее удобный способ создания конкретного экземпляра 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...
Ответы
Ответ 1
Чтобы остановить обсуждение, я решил, наконец, ответить на этот вопрос самостоятельно.
В комментариях, которые я хочу собрать в этом коротком ответе, есть несколько действительно полезных решений:
- Представление фасада/адаптера
- MS Fakes или другие рамки для
- поддельный доступ к SPTimeZone
- создать поддельный HttpContext
- пойти с хаком, описанным в вопросе выше...
Я, со своей стороны, решил пойти с MSFakes, чтобы подделать весь сторонний вызов (так как я так и не тестировал его поведение) и закрепить все свойства SPTimeZone, которые я использую в своем методе. Внедрение адаптера, к сожалению, не было для меня вариантом, поскольку мне пришлось сохранить (внутренний) API.