Angenommen, Sie irgendeine Art von IOC / DI-Container verwenden, sollten Sie nicht auf Controller.Server
ab. Stattdessen sollten Sie HttpServerUtilityBase
verwenden.
In diesem Beispiel wird davon ausgegangen, Ninject als IOC-Container, aber keines der beliebten Container tun:
Registrieren Sie zuerst HttpServerUtilityBase
mit Ihrem IOC-Container wie folgt:
Dies wird sicherstellen, dass Ihre Anwendung zur Laufzeit wird die aktuelle Anforderung des Server Eigenschaft verwenden.
Dann einen Konstruktor zu Ihrem Controller hinzufügen, die eine Instanz% akzeptiert co_de%:
%Vor% Jetzt, wo immer du HttpServerUtilityBase
aufgerufen hast, rufe stattdessen einfach Server.MapPath
auf.
Schließlich können Sie in Ihren Tests HttpServerUtilityBase wie folgt vortäuschen (unter der Annahme, dass Moq das Mock Framework ist):
%Vor%BEARBEITEN
Da Sie erwähnt haben, dass Sie kein DI-Framework verwenden, können Sie auf "Injection des armen Mannes" zurückgreifen. Im Wesentlichen einen überladenen Konstruktor hinzufügen:
%Vor% Dadurch kann der Produktionscode die aktuelle Webanfrage verwenden, aber Sie können dann Ihre eigene Implementierung von _server.MapPath
für den Test erstellen.