我正在尝试模拟 UserStore 的 CreateAsync
方法以获得内存中的用户存储。
public void Can_Create_User()
{
//Arrange
var dummyUser = new ApplicationUser() { UserName = "PinkWarrior", Email = "PinkWarrior@PinkWarrior.com" };
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,它不是从我的模拟商店返回用户的模拟?
This answer有点相似,但没有在这里回答我的问题。
非常感谢任何帮助
最佳答案
您需要模拟对 FindByNameAsync 的调用,因为这是 UserManager 将调用的内容:
public void Can_Create_User()
{
//Arrange
var dummyUser = new ApplicationUser() { UserName = "PinkWarrior", Email = "PinkWarrior@PinkWarrior.com" };
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 以某种方式调用了您的 mockStore。
关于c# - 如何模拟 Asp.net 身份 UserManager 的 CreateAsync 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28645232/