Как это проверить - PullRequest
       18

Как это проверить

0 голосов
/ 02 февраля 2011

Я пытаюсь написать свой первый модульный тест для одного из моих сервисных уровней. Я использую 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;
    }

Так вот, что у меня есть.

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 16 февраля 2011

Я бы обернул метод 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; o)

С уважением, Мортен

0 голосов
/ 02 февраля 2011

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

...