我试图对包含以下行的代码进行单元测试:
UserLoginInfo userIdentity = UserManager.GetLogins(User.Identity.GetUserId()).FirstOrDefault();
我只能坚持一点,因为我无法获得:
User.Identity.GetUserId()
返回一个值。我在 Controller 的设置中一直尝试以下操作:
var mock = new Mock<ControllerContext>();
mock.Setup(p => p.HttpContext.User.Identity.GetUserId()).Returns("string");
但是它给出了错误“NotSupportedException未由用户代码处理”。我也尝试了以下方法:
ControllerContext controllerContext = new ControllerContext();
string username = "username";
string userid = Guid.NewGuid().ToString("N"); //could be a constant
List<Claim> claims = new List<Claim>{
new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", username),
new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", userid)
};
var genericIdentity = new GenericIdentity("Andrew");
genericIdentity.AddClaims(claims);
var genericPrincipal = new GenericPrincipal(genericIdentity, new string[] { });
controllerContext.HttpContext.User = genericPrincipal;
基于我在stackoverflow上找到的一些代码,但这返回了相同的错误“用户代码未处理NotSupportedException”。
任何有关我如何进行的帮助将不胜感激。谢谢。
最佳答案
您无法设置GetUserId方法,因为它是扩展方法。相反,您必须在用户的IIdentity属性上设置名称。 GetUserId将使用它来确定UserId。
var context = new Mock<HttpContextBase>();
var mockIdentity = new Mock<IIdentity>();
context.SetupGet(x => x.User.Identity).Returns(mockIdentity.Object);
mockIdentity.Setup(x => x.Name).Returns("test_name");
看到更多信息:http://msdn.microsoft.com/en-us/library/microsoft.aspnet.identity.identityextensions.getuserid(v=vs.111).aspx