Настройка Visual Studio TDD - PullRequest
12 голосов
/ 10 июля 2011

Я разработчик на C #, новичок в TDD, готовый поэкспериментировать с этой методологией разработки.

Моя текущая настройка - Visual Studio 2010 + Resharper (очень удобно для запуска модульных тестов - настроить сеанс модульного тестирования иесть кнопки Run и Debug Tests).

Тем не менее, я чувствую, что могут быть способы еще больше ускорить TDD (например, при сохранении файла тестов автоматически запускать в нем тесты).

Итак, эксперты TDD, использующие Visual Studio - можете ли вы поделиться какими-либо советами о том, как сделать процесс TDD более продуктивным?

Ответы [ 4 ]

8 голосов
/ 11 июля 2011

Инструменты

Я обычно привязываю сочетание клавиш к контекстному запуску.Вы можете сделать это в настройках Visual Studio, нажав «Инструменты», «Параметры», и в разделе «Среда -> Клавиатура» вы можете найти «ReSharper.ReSharper_ReSharper_UnitTest_RunContext».Я полагаю, что Resharper 6 назначит ему сочетание клавиш Ctrl + T , R .Я обычно всегда назначал его Alt + ; .

Это запустит модульные тесты в контексте .Так что, если ваш курсор находится внутри теста, вы только что закончили писать;этот тест запускается.Если курсор находится внутри Test Class / Test Fixture;запускается.

Вы также можете сделать несколько шаблонов R # .Обычно я делаю шаблон с именем Test, который выглядит следующим образом:

[Test] //NUnit Change attribute to [TestMethod] if MSTest.
public void $NAME$()
{
    $END$
}

Я предпочитаю шаблоны R #, а не фрагменты кода Visual Studio, потому что вы можете создавать шаблоны уровня «Решение», которые сохраняются в файле XML вместе ссторона файла решения.Поэтому, когда вы проверяете это;все ваши коллеги также имеют доступ к шаблонам;или даже вы с другой рабочей станции.

Таким образом, вы можете продолжать добавлять тесты без всяких шаблонов.Вы даже можете создавать шаблоны файлов для целых приборов.

Реальная хитрость в плавном развитии - это изучение всех сочетаний клавиш.Как только вы знаете их и овладеете ими;ваши руки начинают делать это, даже не задумываясь.Добавьте / измените тест, и вы начнете автоматически нажимать команду запуска контекста (какую бы вы ни использовали), даже не задумываясь.

Непрерывная интеграция

Еще один не связанный инструмент;но очень мощный, с которым должен ознакомиться каждый TDDer - это сервер непрерывной интеграции (CI).Это позволит вам запускать тесты каждый раз при входе в систему контроля версий.Со временем достаточно большие проекты получат наборы из 1000 тестов.Запускать их все время самому себе становится непрактичным.Сервер CI, такой как TeamCity , будет запускать ваши тесты на сервере при регистрации. Затем он сообщит обо всем, что сломалось, когда это будет сделано;так что вы можете продолжать работать, пока он запускает другие тесты.Возможно, вы не думали, что сломали, но сделали.Есть и другие хорошие бесплатные игры;как Хадсон . РЕДАКТИРОВАТЬ : Как Петр указал в комментариях;CruiseControl.NET - это CI-сервер с открытым исходным кодом, который существует уже некоторое время;определенно стоит проверить.

Мое типичное руководство - запускать тесты, которые я считаю релевантными.Я использую NUnit, который имеет [Category] атрибут.Я управляю всеми категориями, которые, я думаю, затронуты;и пусть CI-сервер позаботится обо всем остальном.

Coding Discipline

Тесты - это тоже код.Они должны быть реорганизованы;и поддерживается.Я видел, как многие люди отказываются от тестирования, потому что они заканчивают тестами на спагетти.Держите свои юнит-тесты сосредоточенными на маленьком, единственном модуле.Он начинает тормозить вас и вашу команду, когда испытания становятся хрупкими.Как правило, не вдаваясь в подробности;следование принципам SOLID помогает в тестировании.

1 голос
/ 12 июля 2011

Я нахожу хитрость настройки NUnit для автоматического запуска тестов при перезагрузке очень изящной.

Tools > Settings > Test Loader (tree) > Assembly Reload > Re-run last tests run

Это сжимает тесты сборки и запуска в один шаг.

Инструменты только ускорят вас до определенной точки ... кроме того, реальный импульс получается благодаря отражению в вашем методе TDD.Читать, практиковаться, размышлять и адаптироваться.

Мои личные дополнения

  • отслеживание ритма TDD (Red-Green-Refactor)
  • отслеживание времени, проведенного в состоянии неработающей сборки (ошибки компиляции / тестирования)
  • запустить тесты при сборке и просмотреть результат в IDE
  • получить трассировки ошибок в IDE

Первые три были выполнены как часть VS VS Extension ... WIP.

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

1 голос
/ 11 июля 2011

Сохранение времени сборки на низком уровне.Вам нужно будет часто запускать тесты.Вот несколько вещей, которые я делаю.

  1. Следите за событиями перед сборкой, которые замедляют работу
  2. Убедитесь, что вы строите проекты только по мере необходимости.В Visual Studio 2010 установите флажки Инструменты - Параметры - Проекты и решения - Построить и запустить - Построить только запускаемые проекты и зависимости при запуске
  3. Убедитесь, что тесты работают быстро.Модульные тесты не должны были быть сделаны много.На текущем компьютере должна быть возможность запускать от десятков до сотен в секунду.
  4. Сплит-модульные тесты и интеграционные тесты.Запускайте юнит-тесты чаще.Разумеется, запустите все тесты, прежде чем приступить к общей системе управления версиями.
1 голос
/ 11 июля 2011

Возможно, вы захотите использовать некоторые фрагменты кода для тестирования.

http://www.codeproject.com/KB/dotnet/UnitTestCodeSnips.aspx

Возможны конфликты с R #.

...