Зачем мне проверять действие этого контроллера? - PullRequest
1 голос
/ 17 декабря 2009

У меня есть ArticleController, который отображает список статей по категориям.

public ActionResult List(string categoryname)
{
       MyStronglyTypedViewData vd = new MyStronglyTypedViewData();

       DBFactory factory = new DBFactory();

       categoryDao = factory.GetCategoryDao();
       articleDao = factory.GetArticleDao();


       vd.Category = categoryDao.GetByName(categoryname);
       vd.Articles = articleDao.GetByCategoryId(vd.Category.Id);


       return View(vd);
}

Если бы я должен был провести юнит-тестирование этого действия, что именно было бы целью? Чтобы убедиться, что открывается правильный вид?

Ответы [ 4 ]

8 голосов
/ 17 декабря 2009
  1. Убедитесь, что ViewResult возвращается
  2. Убедитесь, что результат просмотра имеет модель
  3. Убедитесь, что эта модель не нулевая и имеет тип MyStronglyTypedViewData
  4. Свойства объекта на модели

Эта строка DBFactory factory = new DBFactory(); заставляет меня думать, что было бы сложно написать модульный тест, потому что вы не используете интерфейс, который может быть смоделирован, а скорее полагаетесь на конкретный класс, который может попасть в реальную базу данных.

3 голосов
/ 17 декабря 2009

Рассмотрим также случаи ошибок: categoryname - это строка из Интернета. Как должно вести себя действие, если пользователь пропустил «плохой»? Похоже, вы можете получить нулевую ссылку?

Проверять случаи ошибок так же важно, как и функциональные случаи.

1 голос
/ 20 декабря 2009

Это то, что наша команда пришла к выводу, что должно быть проверено (мы используем BDD) для каждого контроллера:

  • Убедитесь, что каждое действие возвращает правильное имя представления.
    • Убедитесь, что каждое ViewName соответствующим образом запущено и возвращено, если действие может возвращать несколько представлений.
    • Убедитесь, что возвращенные ViewData полностью заполнены и введите правильный.
  • Убедитесь, что контроллер выдает правильные исключения.
    • Убедитесь, что все RuleViolations, всплывающие из сервиса / модели, содержатся в ViewData. (это выходит за рамки просто нарушений ограничений данных в Запросе)
1 голос
/ 17 декабря 2009

Проверка различных краевых случаев в объектах, возвращаемых categoryDao.GetByName(categoryname); и articleDao.GetByCategoryId(vd.Category.Id); Проверка того, что происходит, когда они генерируют исключения

Кроме того, если вы считаете, что ваш дизайн мог бы быть лучше, если бы он соответствовал Принципу инверсии зависимостей (я просто говорю «если»; следует ли вам верить, что это отдельный вопрос), тогда попробуйте написать хорошо изолированный модульный тест для вашего метода и сломать зависимости может быть полезным упражнением, ведущим к улучшению дизайна вашей программы.

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