Настройка TDD Visual Studio
Я разработчик C#, новый для TDD, готовый экспериментировать с этой методологией разработки.
моя текущая настройка-Visual Studio 2010 + Resharper (очень удобно для запуска модульных тестов - настройте сеанс модульного тестирования, и есть кнопки запуска и отладки тестов).
тем не менее, я чувствую, что могут быть способы ускорить TDD еще больше (например: при сохранении файла тестов автоматически запускать тесты в нем).
Итак, эксперты TDD с помощью Visual Studio-можете ли вы поделитесь советами о том, как сделать процесс TDD более продуктивным?
4 ответов
инструменты
обычно я привязываю сочетание клавиш к контекстному запуску. Вы можете сделать это в параметрах Visual Studio, нажав "Инструменты", "Параметры", а в разделе "среда -> клавиатура" вы можете найти "ReSharper.ReSharper_ReSharper_UnitTest_Runcontext". Я считаю, что Resharper 6 назначит ему комбинацию клавиш,Ctrl+T, R. Я обычно всегда назначал его Alt+;.
это будет работать модульные тесты в контексте. Поэтому, если ваш курсор находится внутри теста, который вы только что закончили писать; этот тест запускается. Если курсор находится внутри тестового класса / тестового приспособления; это запускается.
вы также можете сделать некоторые R# шаблоны. Обычно я делаю шаблон под названием Test
это выглядит так:
[Test] //NUnit Change attribute to [TestMethod] if MSTest.
public void $NAME$()
{
$END$
}
Я предпочитаю шаблоны R# над фрагментами кода Visual Studio, потому что вы можете сделать шаблоны уровня "решение", которые хранятся в XML файл рядом с файлом решения. Поэтому, когда вы регистрируете его; все ваши коллеги также имеют доступ к шаблонам; или даже вы с другой рабочей станции.
таким образом, вы можете продолжать добавлять тесты без всех шаблонных вещей. Вы даже можете сделать шаблоны файлов для целых светильников.
реальный трюк, чтобы получить его происходит плавно изучает все сочетания клавиш. Как только вы узнаете их и овладеете ими, ваши руки начнут делать это, даже не думая. Добавлять / Измените тест, и вы начнете автоматически нажимать команду context run (какую бы вы ни использовали), даже не думая.
Непрерывная Интеграция
другой несвязанный инструмент; но очень мощный каждый TDDer должен ознакомиться с сервером непрерывной интеграции (CI). Это позволит вам запускать тесты всякий раз, когда вы проверяете систему управления версиями. В конце концов проекты достаточно большие получат наборы 1000-х тестов. Управляя ими все время, ты сам становишься ... непрактичный. Сервер CI, например TeamCity, будет выполнять тесты на сервере, при регистрации. Затем он сообщит обо всем, что сломано, когда это будет сделано; поэтому вы можете продолжать работать, пока он выполняет другие тесты. Те, которые вы, возможно, не думали, что сломали, но сделали. Есть некоторые другие хорошие бесплатные доступны, как Гудзон. редактировать: как отметил Петр в комментариях; CruiseControl.NET является сервером CI с открытым исходным кодом, который существует некоторое время; определенно стоит проверить.
моя типичная рекомендация-запускать тесты, которые я считаю релевантные. Я использую NUnit, который имеет . Я запускаю все категории, которые, по моему мнению, затронуты; и пусть сервер CI позаботится об остальном.
Кодирование Дисциплине
тесты это тоже код. Они должны быть подвергнуты рефакторингу; и ухоженные. Я видел, как многие люди отказывались от тестирования, потому что они закончили тест на спагетти. Держите модульные тесты сосредоточенными на небольшом, одно устройство. Это начинает замедлять вас и вашу команду, когда тесты хрупкие. Как правило, не вдаваясь в подробности; следуя твердые принципы помогает с тестированием.
вы можете использовать некоторые фрагменты кода для тестирования.
http://www.codeproject.com/KB/dotnet/UnitTestCodeSnips.aspx
могут возникнуть некоторые конфликты с R#.
сохранение времени сборки низким. Вам нужно будет часто запускать тесты. Вот несколько вещей, которые я делаю.
- следите за событиями предварительной сборки, которые замедляют работу
- убедитесь, что вы только строите проекты по мере необходимости. В visual studio 2010 проверьте Инструменты-Параметры-проекты и решения - сборка и запуск - только создавать проекты запуска и зависимости от run
- убедитесь, что ваши тесты работают быстро. Модульные тесты не должны были быть сделаны. Должно быть возможно запускать десятки-сотни в секунду на текущей машине.
- Сплит модульные тесты и интеграционные тесты. Чаще выполняйте модульные тесты. Конечно, запустите все тесты перед фиксацией в общей системе управления версиями.
Я нахожу трюк настройки NUnit для автоматического запуска тестов при перезагрузке очень изящным.
Tools > Settings > Test Loader (tree) > Assembly Reload > Re-run last tests run
это сжимает build-and-run-tests в один шаг.
инструменты только сделают вас быстрее до точки... кроме того, реальный импульс приходит от размышлений о вашем методе TDD. Читайте, практикуйте, размышляйте и адаптируйтесь.
мои личные дополнения
- трек TDD ритм (красный-зеленый-рефакторинг)
- отслеживать время, проведенное в разбитой строит состояние (ошибки компиляции/тестирования)
- запуск тестов на сборку и просмотр результата в IDE
- получить следы сбоев в IDE
получил первые три сделано как часть расширения VS... МСЗ.
Update: это было не указано, но... упорядочить все рутинные вещи. например, используйте инструменты для рефакторинга, используйте шаблоны/фрагменты кода для шаблонов кода freq, станьте одним с IDE (мастер-сочетания клавиш для всех freq-используемых действий, привязать нажатия клавиш к тем, которые не есть)