Любой учебник по TDD будет полезен для MVC. Некоторое время я занимался TDD и обнаружил, что это был естественный переход в MVC. Я обнаружил, что есть несколько особенностей, которые необходимо устранить.
Вам часто нужно макетировать HttpContext, что означает, что вам нужно назначить ControllerContext контроллеру после его создания, поскольку это единственный способ внедрить макет. Контекст будет использоваться для предоставления объектов Session, Request и Response в контроллере (также имитировать их). Новые классы HttpContextBase, HttpSessionStateBase, ... делают это намного проще.
Из-за (1) потратьте некоторое время на то, чтобы собрать несколько вспомогательных классов в отдельной библиотеке классов, которая может использоваться всеми вашими тестовыми проектами. Эти вспомогательные классы должны содержать методы, которые предоставляют настраиваемые (или несколько методов для предоставления определенных конфигураций) макетированных контекстов. Это поможет сохранить ваши тесты компактными.
Используйте и назначьте ValueProvider для методов тестирования, которые принимают параметры, если вы не используете ModelBinding (с соответствующими параметрами в подписи) для действия контроллера. Это позволит вам использовать TryUpdateModel / UpdateModel без добавления кода в ваш контроллер для получения данных из запроса в эти методы.
Используйте фальшивые рамки - если это не очевидно сверху. Написание тестов будет намного проще, если вы смоделируете зависимости. Написание собственных издевательств, IMO, не стоит, хотя я знаю, что другие не разделяют это мнение. Я думаю, это не уникально для MVC, но я подумал, что упомяну это.
Настройте отдельный набор тестов, которые используют отражение, чтобы проверить, что соответствующие атрибуты с соответствующими свойствами устанавливаются в ваших методах. MVC интенсивно использует атрибуты для обеспечения безопасности и других сквозных аспектов. Они также должны быть проверены.