我有一段艱難的時間試圖找出爲什麼我運行我的測試時,我的模擬User.Identity.Name返回null。我有一種感覺,當我調用我的controller.ControllerContext時,我可能已經搞砸了,因爲我在那個時候設置了一些路線,但我不確定如何調整回去分配一個對象,就像我在之前的測試中所做的那樣。我用MSTest使用Moq。下面是我的測試:User.Identity.Name被模擬後返回null
[TestMethod]
public void Leave_Request_Process_Approved()
{
var routes = new RouteCollection();
routes.MapHttpRoute(name: "myAPI", routeTemplate: "api/myFolder/{controller}/{id}", defaults: new { id = RouteParameter.Optional });
RouteConfig.RegisterRoutes(routes);
var controllerContext = new Mock<ControllerContext>();
var session = new Mock<HttpSessionStateBase>();
session.SetupGet(s => s["altUser"]).Returns("Mod");
controllerContext.Setup(p => p.HttpContext.Session).Returns(session.Object);
controllerContext.Setup(p => p.HttpContext.User.Identity.Name).Returns("User");
controllerContext.Setup(p => p.HttpContext.Request.UserHostAddress).Returns("127.0.0.1");
var request = new Mock<HttpRequestBase>();
request.Setup(x => x.ApplicationPath).Returns("/");
request.Setup(x => x.Url).Returns(new Uri("http://temp-removed"));
request.Setup(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection());
var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);
var response = new Mock<HttpResponseBase>();
response.Setup(x => x.ApplyAppPathModifier(It.IsAny<string>())).Returns<string>(x => x);
context.Setup(x => x.Response).Returns(response.Object);
var controller = new myController();
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
controller.Url = new UrlHelper(new RequestContext(context.Object, new RouteData()), routes);
Assert.IsNotNull(controller.Process(5058, "A", ""));
}
隨着我已經建立在過去的測試中,我通常有我controller.ControllerContext:
controller.ControllerContext = controllerContext.Object;
我曾嘗試,看看是否有任何controllerContext.Setup選項或context.Setup選項我可以使用,但Intellisense不提供任何我可以看到,以取代我在我的路由信息中調用的選項。
想想也許你傷害了它的感情? –
現在,我根本不知道Moq,也不知道MVC(我認爲這是),所以在這裏黑暗中只是一個鏡頭。你的模擬控制器環境在哪裏起作用?我看到你在該方法的早期設置,但我沒有看到它被使用。 –
「在蘇聯俄羅斯,User.Identity.Name嘲笑你」(抱歉,無法抗拒) – Tallek