Was ist der bequemste Weg, um eine bestimmte Instanz Microsoft.SharePoint.SPTimeZone
wie die folgende zu erstellen :
SPTimeZone utc = SPRegionalSettings.GlobalTimeZones
.OfType<SPTimeZone>()
.FirstOrDefault(tz => tz.Information.Bias == 0
&& tz.Information.DaylightBias == 0);
Ist dieser Hack der beste, den ich bekommen kann ...
Dies ist insbesondere für mich ein Problem, da ich diesen Teil des Codes für Unit-Tests verspotten und zwingen möchte, immer UTC zurückzugeben. Die Eigenschaft GlobalTimeZones
scheint von HttpContext.Current
oder einer tatsächlichen Anfrage abzuhängen - eine Voraussetzung, die ich in meinen Unit Tests nicht habe ...
NB: Ich weiß, dass es System.TimeZoneInfo
nur eine Versammlung von Drittanbietern gibt, die mich dazu zwingt, SPTimeZone zu verwenden ...
SPTimeZone
soll die Zeitzone der Site sein, nicht als generische Zeitzonenklasse. Einstellungen gibt Ihnen die Liste der verfügbaren, dh installierten Zeitzonen und wird wahrscheinlich aus den Einstellungen in der Datenbank geladen. Das Fehlen eines Konstruktors hat einen Grund - Sie sollten dies nicht selbst erstellen.SPWeb.RegionalSettings.TimeZone
SPRegionalSettings.GlobalTimeZones
Verhalten und dann wiederIEnumarable
vonSPTimeZone
. Ich habe keinen Sharepoint-Server, um es zu überprüfen ....SPTimeZone
so stubben , dass Sie eine bestimmte Zeitzone haben. Übrigens , wenn Geld kein Thema ist, biete ich Ihnen an, TypeMock Isolator zu verwenden, und dann können Sie fast alles tun ...Antworten:
Um die Diskussion zu beenden, habe ich beschlossen, diese Frage endlich selbst zu beantworten.
In den Kommentaren gibt es einige wirklich hilfreiche Lösungen, die ich in dieser kurzen Antwort zusammenfassen möchte:
Ich für meinen Teil habe mich entschieden, mit MSFakes den gesamten Anruf eines Drittanbieters zu shimen (da ich sein Verhalten sowieso nicht testen wollte) und alle Eigenschaften von SPTimeZone zu shimen, die ich in meiner Methode verwende. Die Einführung eines Adapters war für mich leider keine Option, da ich die (interne) API beibehalten musste.
quelle