gpt4 book ai didi

c# - 从模拟的 ApplicationUserManager.Users 返回用户

转载 作者:行者123 更新时间:2023-11-30 23:11:36 25 4
gpt4 key购买 nike

我正在尝试模拟 ApplicationUserManager.Users 以便我可以测试 Controller 方法。我的 Controller 是

public class ManageController : Controller
{
private readonly ApplicationUserManager userManager;

public ManagerController(ApplicationUserManager userManager)
{
this.userManager = userManager;
}

// The method being tested
public ActionResult ListUsers()
{
// I want this to return my mocked user list
var users = this.userManager.Users.ToList();

// Do other stuff
}
}

我的测试方法是

[TestMethod]
public void ListUsersGet_ShouldSucceed()
{
var users = new List<ApplicationUser>
{
new ApplicationUser { Id = "1", FirstName = "Test", LastName = "User" }
}.AsQueryable();
Mock<DbSet<ApplicationUser>> dbSet = new Mock<DbSet<ApplicationUser>>();
dbSet.As<IQueryable<ApplicationUser>>().Setup(e => e.ElementType).Returns(users.ElementType);
dbSet.As<IQueryable<ApplicationUser>>().Setup(e => e.Expression).Returns(users.Expression);
dbSet.As<IQueryable<ApplicationUser>>().Setup(e => e.GetEnumerator()).Returns(users.GetEnumerator());
dbSet.As<IQueryable<ApplicationUser>>().Setup(e => e.Provider).Returns(users.Provider);

Mock<MyContext> context = new Mock<MyContext>();
context.Setup(e => e.Users).Returns(dbSet.Object);

Mock<UserStore<ApplicationUser>> userStore = new Mock<UserStore<ApplicationUser>>(context.Object);

var controller = new ManageController(new ApplicationUserManager(userStore.Object));

var result = controller.ListUsers() as ViewResult;

// Assert some stuff
}

当我进入我的 Controller 方法时,我可以看到 users 为空。 this.userManager.Users 似乎没有返回我尝试在我的测试方法中设置的用户。

如何让 this.userManager.Users.ToList() 返回我的测试用户?

最佳答案

用户管理器公开 public virtual IQueryable<TUser> Users { get; }属性(property)。模拟用户管理器依赖并将其提供给 Controller 。

public void _ListUsersGet_ShouldSucceed() {
// Arrange.
var users = new List<ApplicationUser>
{
new ApplicationUser { Id = "1", FirstName = "Test", LastName = "User" }
}.AsQueryable();

//Only mocking this because we need it to initialize manager.
var userStore = Mock.Of<IUserStore<ApplicationUser>>();

var userManager = new Mock<ApplicationUserManager>(userStore);
userManager.Setup(_ => _.Users).Returns(users);

var controller = new ManageController(userManager.Object);

// Act.
var result = controller.ListUsers() as ViewResult;

// Assert some stuff
}

检查 Quick start documentation更熟悉模拟框架

关于c# - 从模拟的 ApplicationUserManager.Users 返回用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44594969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com