我正在尝试对包含以下代码行的代码进行单元测试:
UserLoginInfo userIdentity = UserManager.GetLogins(User.Identity.GetUserId()).FirstOrDefault();
我只卡在了一个地方,因为我无法理解:
User.Identity.GetUserId()
为了返回一个值,我一直在尝试在我的控制器设置中使用以下代码:
var mock = new Mock<ControllerContext>();
mock.Setup(p => p.HttpContext.User.Identity.GetUserId()).Returns("string");
但是它会出现“NotSupportedException was unhandled by user code”的错误。我也尝试了以下方法:
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 was unhandled by user code"。如何继续操作需要帮助。谢谢。
IIdentity
,将其抽象出来,使其与GetUserId
扩展方法分离,并将其设置为调用您的UserManager
的代码的依赖项。 - Sebastian Piu