2013-04-01 2 views
0

Единичное тестирование поставщика роли для сбоя.asp.net MVC3 Unit Testing - поставщик ролей

[TestMethod] 
    public void FindUsersInRole() 
    { 
     Mock<IUsersInRoleRepository> userInRoleMock = new Mock<IUsersInRoleRepository>(); 
     userInRoleMock.Setup(m => m.UsersInRoles).Returns(new UsersInRole[] { 
      new UsersInRole { UserId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"), RoleId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa") }, 
      new UsersInRole { UserId = Guid.Parse("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"), RoleId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa") }, 
      new UsersInRole { UserId = Guid.Parse("cccccccc-cccc-cccc-cccc-cccccccccccc"), RoleId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa") }, 
      new UsersInRole { UserId = Guid.Parse("dddddddd-dddd-dddd-dddd-dddddddddddd"), RoleId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa") }, 
      new UsersInRole { UserId = Guid.Parse("eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee"), RoleId = Guid.Parse("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb") } 
     }.AsQueryable()); 

     Mock<IRoleRepository> roleMock = new Mock<IRoleRepository>(); 
     roleMock.Setup(m => m.Roles).Returns(new Role[] { 
      new Role { RoleId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"), RoleName = "test" }, 
      new Role { RoleId = Guid.Parse("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"), RoleName = "admin" } 
     }.AsQueryable()); 

     Mock<IUserRepository> userMock = new Mock<IUserRepository>(); 
     userMock.Setup(m => m.Users).Returns(new User[] { 
      new User { UserId = Guid.Parse("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"), UserAccount = "abcdef" }, 
      new User { UserId = Guid.Parse("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"), UserAccount = "bcdef" }, 
      new User { UserId = Guid.Parse("cccccccc-cccc-cccc-cccc-cccccccccccc"), UserAccount = "cdef" }, 
      new User { UserId = Guid.Parse("dddddddd-dddd-dddd-dddd-dddddddddddd"), UserAccount = "bcdf" }, 
      new User { UserId = Guid.Parse("eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee"), UserAccount = "abcde" } 
     }.AsQueryable()); 

     RoleProvider target = new RoleProvider(userMock.Object, roleMock.Object, userInRoleMock.Object); 

     string[] result = target.FindUsersInRole("test", "cde"); 

     Assert.AreEqual(result[0], "abcdef"); 
     Assert.AreEqual(result[1], "bcdef"); 
     Assert.AreEqual(result[2], "cdef"); 
    } 

Блок Код проверки

строка [] Результат = target.FindUsersInRole ("тест", "CDE"); < - error

FindUsersInRole - Получает массив имен пользователей в роли, где имя пользователя содержит указанное имя пользователя для соответствия.

Исправление System.NullReferenceException и попытка отладки.

Почему NullReferenceException?

PS - FindUsersInRole (RoleProvider)

public override string[] FindUsersInRole(string roleName, string userAccountToMatch) 
    { 
     Guid roleId = roleRepository.GetRole(roleName).RoleId; // RoleId Retrun.. NullReferenceException 

     var roleInUsers = (from ru in usersInRoleRepository.UsersInRoles 
          where ru.RoleId == roleId 
          select ru.UserId).ToArray(); 

     var findUserResult = (from u in userRepository.Users 
           where roleInUsers.Contains(u.UserId) && u.UserAccount.Contains(userAccountToMatch) 
           select u.UserAccount).ToArray(); 

     return findUserResult; 
    } 
+0

Вам нужно будет показать, как реализуется метод 'FindUsersInRole', который вы пытаетесь протестировать. –

+0

Ваш cde не поддельный пользователь в mackUserAccount. Пожалуйста, см. Мой ниже ответ –

ответ

0

Ваш CDE является не псевдопользователь в mackUserAccount. Таким образом, его возврат невозможен.

попробуйте эту строку кода ниже [] result = target.FindUsersInRole ("test", "abcdef"); вместо

string[] result = target.FindUsersInRole("test", "cde");