2011-02-01 2 views
0

Я пытаюсь написать свой первый модульный тест для одного из моих уровней обслуживания. Я использую nunit и moq (последние версии).Как выполнить модульное тестирование

У меня есть репо, но я буду издеваться над этим, что не проблема.

public void Create(string email, int id) 
    { 
      User user = Repo.GetUserByEmail(email); // mock this out. and return a mocked user. 

      if user != null) 
      { 

       // check permission 
       var clearence = GetPermissions(user, PermissionTypes.Add, id); 

       // some other stuff 

      } 
    } 


    private static List<Permissions> GetPermissions(User user, PermissionTypes PermissionNeeded, int id) 
    { 
     List<PermissionLevel> clearence = user.PermissionLevels.Where(u => u.id == id && 
                        (u.Permission.Name == PermissionNeeded || u.Permission.Name == PermissionTypes.Owner)).ToList(); 
     return clearence; 
    } 

Это то, что у меня есть.

Теперь, что меня заставляет, это разрешение. Я не уверен, как это сделать. Я не уверен, должен ли я сделать объект пользователя, у которого есть allowLevels в нем, который содержит идентификатор.

Я не уверен, могу ли я издеваться над этим, но я сомневаюсь, так как это личное.

Вторая проблема заключается в том, что я не уверен, как создать «id», поскольку «id» находится в классе домена, который имеет частный набор, потому что он был стандартным для nhibernate.

Так что я не уверен, как обойти это.

+0

Какой код вы хотите проверить? 'GetPermissions' или" // некоторые другие вещи "? –

+0

dv-Jan de Vaan - другое, что я думаю. Что в основном является выражением if для проверки разрешения, то если хорошо создать задачу (другое дело в моем репо). Если нет, то ошибка проверки. Сначала мне нужно получить этот метод, и он должен вернуть счетчик> 0. 0. – chobo2

ответ

0

Да, если вы издеваетесь над GetUserByEmail, вы можете вернуть его пользователю, содержащему образец набора разрешений.

+0

будет ли это автообъект + автоматический moq помочь мне сделать эти объекты. например, я сказал, что не знаю, как сделать идентификатор, поскольку это частный набор (так как я сказал, что это стандартный способ сделать это с nhibernate, чтобы убедиться, что автоматически сгенерированный идентификатор не может быть установлен). – chobo2

0

Я бы обернул метод Repo.GetUserByEmail в отдельный класс и ввел его в ваш класс. Что-то вроде этого:

public class YourClass 
{ 
    private readonly UserProvider _userProvider; 

    public TestedClass(UserProvider userProvider) 
    { 
     _userProvider = userProvider; 
    } 

    public void Create(string email, int id) 
    { 
     User user = _userProvider.GetUser(email, PermissionTypes.Add, id); // mock this out. and return a mocked user. 

     if (user != null) 
     { 

      // check permission 
      var clearence = GetPermissions(user, PermissionTypes.Add, id); 

      // some other stuff 

     } 
    }   
} 

public class UserProvider 
{ 
    public User GetUser(string email, PermissionTypes.Add, id) 
    { 
     return Repo.GetUserByEmail(email); 
    } 
} 

Таким образом, вы можете окурок класса UserProvider и всегда имеет полный контроль над пользователем в тесте.

Не забудьте проверить класс UserProvider а; о)

С уважением, Morten

Смежные вопросы