我正在尝试模拟UserStore的CreateAsync
方法以在内存中存储用户。
public void Can_Create_User()
{
//Arrange
var dummyUser = new ApplicationUser() { UserName = "PinkWarrior", Email = "[email protected]" };
var mockStore = new Mock<IUserStore<ApplicationUser>>();
var userManager = new UserManager<ApplicationUser>(mockStore.Object);
mockStore.Setup(x => x.CreateAsync(dummyUser))
.Returns(Task.FromResult(IdentityResult.Success));
//Act
Task<IdentityResult> tt = (Task<IdentityResult>)mockStore.Object.CreateAsync(dummyUser);
var user = userManager.FindByName("PinkWarrior");
//Assert
Assert.AreEqual("PinkWarrior", user.UserName);
}
在user
上面总是空的,因为我从来没有插入。因此,我的问题是如何制作userManager,这不是从模拟存储中返回用户的模拟?
这个答案有点相似,但是在这里没有回答我的问题。
任何帮助,不胜感激
您需要模拟对FindByNameAsync的调用,因为这是UserManager所调用的:
public void Can_Create_User()
{
//Arrange
var dummyUser = new ApplicationUser() { UserName = "PinkWarrior", Email = "[email protected]" };
var mockStore = new Mock<IUserStore<ApplicationUser>>();
var userManager = new UserManager<ApplicationUser>(mockStore.Object);
mockStore.Setup(x => x.CreateAsync(dummyUser))
.Returns(Task.FromResult(IdentityResult.Success));
mockStore.Setup(x => x.FindByNameAsync(dummyUser.UserName))
.Returns(Task.FromResult(dummyUser));
//Act
Task<IdentityResult> tt = (Task<IdentityResult>)mockStore.Object.CreateAsync(dummyUser);
var user = userManager.FindByName("PinkWarrior");
//Assert
Assert.AreEqual("PinkWarrior", user.UserName);
}
但是,我相信通过这种测试,您正在测试Microsoft.AspNet.Identity.UserManager,而不是您的代码。您证明的是UserManager以某种方式调用了您的模拟存储。
Microsoft.AspNet.Identity的源代码包含这些类型的测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句