如何设置模拟<的UserManager >
问题描述:
如何设置Mock<UserManager<ApplicationUser>> _userManager
所以_userManager.FindByIdAsync(userId)
去ApplicationDbContext,发现了被标识这样_context.Users.SingleOrDefault(u=>u.Id == userId)
用户?如何设置模拟<的UserManager <TUser >>
我的代码:
[TestClass]
public class AccountControllerTest
{
private ApplicationDbContext _context;
private Mock<UserManager<ApplicationUser>> _userManager;
private IHostingEnvironment _enviroment;
private Referrals _referrals;
private Mock<IEmailSender> _emailSender;
private Mock<IUserNameGenerator> _userNameGenerator;
private Mock<IUrlHelper> _urlHelper;
private Mock<SignInManager<ApplicationUser>> _signInManager;
private TimeSpan _startTrialTime;
[TestInitialize]
public void Init()
{
_userManager = UserManagerAndDbMocker.GetMockUserManager();
_context = UserManagerAndDbMocker.ContextInMemoryMocker();
_enviroment = new HostingEnvironment() { EnvironmentName = "Development" };
_referrals = new Referrals(_context, _userManager.Object);
_emailSender = new Mock<IEmailSender>();
_userNameGenerator = new Mock<IUserNameGenerator>();
_urlHelper = new Mock<IUrlHelper>();
_signInManager = new Mock<SignInManager<ApplicationUser>>();
UserManagerSetup();
}
private void UserManagerSetup()
{
_userManager.Setup(um => um.CreateAsync(
It.IsAny<ApplicationUser>(),
It.IsAny<string>()))
.Returns(Task.FromResult(IdentityResult.Success));
_userManager.Setup(um => um.ConfirmEmailAsync(
It.IsAny<ApplicationUser>(),
It.IsAny<string>()))
.Returns(
Task.FromResult(IdentityResult.Success));
_userManager.Setup(um => um.FindByIdAsync(It.IsAny<string>()));
}
我被困在嘲讽FindByIdAsync
。我想在我测试_userManager.FindById(userId)
时返回_context.Users.SingleOrDefault(u=>u.Id == userId)
。
public static class UserManagerAndDbMocker
{
public static Mock<UserManager<ApplicationUser>> GetMockUserManager()
{
var userStoreMock = new Mock<IUserStore<ApplicationUser>>();
return new Mock<UserManager<ApplicationUser>>(
userStoreMock.Object, null, null, null, null, null, null, null, null);
}
public static ApplicationDbContext ContextInMemoryMocker()
{
var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
optionsBuilder.UseInMemoryDatabase();
var context = new ApplicationDbContext(optionsBuilder.Options);
return context;
}
}
我该如何做到这一点?
答
如果我正确理解你的问题,这应该为你工作:
_userManager
.Setup(um => um.FindByIdAsync(It.IsAny<string>()))
.Returns((string userId) => _context.Users.SingleOrDefault(u => u.Id == userId));
的回报方法,你可以指定使用您的实际输入参数拉姆达。
在当前状态下的问题是,目前还不清楚,因为它是不完整的。阅读[问],然后提供[mcve],可用于更好地理解您的问题。 – Nkosi
Hi @Jones,给我们和你的测试代码的例子或完全粘贴它,我们将能够帮助你走向正确的方向。回答这个意见,我会看看(顺便说一句,你是否熟悉Moq图书馆?) – Juan