2017-06-16 93 views
2

返回用户我试图嘲弄ApplicationUserManager.Users这样我就可以测试控制器的方法。我控制器从嘲笑ApplicationUserManager.Users

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 
}   

当我踏进我的控制器的方法,我可以看到users为空。看来,this.userManager.Users没有返回,我试图建立在我的测试方法的用户。

我怎样才能得到this.userManager.Users.ToList()回到我的测试用户?

回答

2

用户管理器公开public virtual IQueryable<TUser> Users { get; }财产。嘲笑用户管理的依赖,并给该控制器。

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获得与模拟框架更熟悉