2017-06-16 11 views
2

ApplicationUserManager.Users私はコントローラメソッドをテストできるように模擬しようとしています。私のテスト方法は、私は私のコントローラメソッドにステップするとき、私はusersがnullであることがわかります模倣したApplicationUserManager.Usersからの返信

[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 
}   

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 
    } 
} 

である私のコントローラです。 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はモックフレームワークとより多くの知り合いに取得する

関連する問題