Как проверить метод void с Moq? - PullRequest
1 голос
/ 16 февраля 2012

Я новичок в TDD, и у меня все еще много вопросов, и один из этих вопросов - как протестировать пустой метод!

У меня есть этот вопрос с параметрами, переданными по ссылке, и я понятия не имею, какtest: (это просто тест, а не мой настоящий метод)

public void ReplaceCenter(ref string cod, ref string name)
    {
        User user = userDAO.GetSomething();

        if (user.Cod != null)
        {
            cod = user.Cod;
        }

        if (user.Name != null)
        {
            name = user.Name;
        }
    }            

Может ли кто-нибудь помочь?Спасибо!

Ответы [ 4 ]

5 голосов
/ 16 февраля 2012

Предполагая, что userDAO был введен как зависимость и может быть смоделирован, я бы сделал следующие тесты:

  1. Assert GetSomething() был вызван для смоделированной userDAO
  2. Assertвозвращенная ссылочная строка cod == передана в User.Cod, который мы использовали для создания mocked userDAO
  3. Assert возвратила ссылочную строку name == переданная в User.Cod, который мы использовали для создания mocked userDAO

Я согласен с тем, чтобы избегать параметров ref, хотя я бы предложил рефакторинг, как это было предложено в другом ответе @Tim Cools

3 голосов
/ 16 февраля 2012

вам следует избегать параметров ref и out. использовать объект, который содержит два свойства.это сделает ваш дизайн чище, а вашу работу намного чище ...

edit: если вы действительно хотите использовать параметры, вы можете найти пример здесь

1 голос
/ 16 февраля 2012

Просто протестируйте значения в параметрах после вызова метода, высмеивая userDAO для контроля того, что он возвращает (ноль, код, имя)

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

Пустой метод подразумевает, что будет некоторый побочный эффект. Я обычно рекомендую избегать их, если это возможно, но когда вам нужно проверить их, общие правила будут следующими:

  1. Утверждаю, что все ожидаемые звонки на ваших издевательствах были сделаны.
  2. Если возможно, утверждать, что макеты были вызваны с конкретными значениями параметров. Это более важно для пустых методов, потому что вы тестируете побочные эффекты.
  3. Утверждают все побочные эффекты, которые вы можете, включая те, которые не должны были быть изменены.

Действительно, эти утверждения должны быть сделаны и для не пустых методов, возможно, в большей степени для предотвращения неожиданных побочных эффектов, чем для проверки на ожидаемые. (IMO, функция должна иметь нулевые побочные эффекты, если это вообще возможно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...