Источник
Когда я программирую, то сначала пишу тесты. Частый ручной прогон тестов может превратиться в утомительное занятие.
Опишу обычный сценарий разработки кода:
Ваши тесты «зеленые» и вы приступили к рефакторингу, который на ваш взгляд простой и безопасный. После этого вы запустили тесты и увидели, что что-то сломалось. Но перед этим вы уже сделали десять маленьких изменений и не знаете какое из них поломало программу. Решение заключалось в более частом запуске тестов (после каждого изменения), но вы забывали сделать это.
Что я хочу, так это иметь возможность, чтобы моя среда разработки (IDE) автоматически запускала тесты каждый раз, когда я делаю изменения в коде. Этот способ подразумевает, что когда я делаю десять маленьких изменений, то и IDE запускает тесты десять раз. И тогда в тот момент, когда вы делаете что-то, как вы думаете, простое, но которое в реальности ломает программу, IDE укажет вам на ваши ошибки. Вы сможете просто нажать Ctrl+z (отмена) и получить обратно работающий код.
Что мне нужно, так это то, чтобы моя IDE запускала тесты каждый раз, как только я сохраняю код. Для этого тесты должны быть быстрыми, поскольку мое терпение после нажатия Ctrl+s составляет только 2 секунды. Что-либо длящееся больше будет меня раздражать. Если ваш набор тестов прогоняется медленно, то сделайте им рефакторинг.
Эта техника подходит только к быстрым модульным тестам (unit-test). Я не запускаю мои сценарные тесты как событие по Ctrl+s.
Я знаю, как это сделать в Eclipse, но, возможно, те из вас, кто пользуется другими IDE, смогут сделать подобную вещь. Я уже подготовился и создал проект, который вы можете скачать.
Вот какая была последовательность действий.
Создание сборщика (Ant Builder):
Вкладка Main:
Вкладка Targets:
Пример запуска: (не очень хорошее качество, но разобрать можно)
Или просто скачайте (zip) их моего репозитория проект, импортируйте его в eclipse и пробуйте.
Удачного тестирования...
Об авторе: Мишко Хевери (Miško Hevery)
… работает В Google инструктором по Гибкой методологии разработки (Agile Coach)и обучает гуглеров культуре автоматического тестирования. Его деятельность помогает Google выпускать частые релизы веб-приложений с постоянно высоким качеством. До этого Миско работал в Adobe, Sun Microsystems, Intel и Xerox (и это не полный список), где он стал экспертом в разработке веб-приложений на Java, JavaScript, Flex и ActionScript. Он много участвует в Open Source сообществе и является автором нескольких проектов с открытим кодом. Недавние его интересы в Разработке через тестирование (Test-Driven-Development ) вылились в реализацию Обозревателя тестируемости (Testability Explorer) и в JsTestDriver, с которыми он надеятся изменить культуру тестирования в open source сообществе.
Проекты с открытым кодом:
Upd 1: существуют хорошие плагины для Eclipse и IntelliJ, которые помогают автоматически запускать тесты — Infinitest
Upd 2: Перевел статью, которая даст дает объяснение понятию модульного теста и избавит от некоторых вопросов в комментариях.
Когда я программирую, то сначала пишу тесты. Частый ручной прогон тестов может превратиться в утомительное занятие.
Опишу обычный сценарий разработки кода:
Ваши тесты «зеленые» и вы приступили к рефакторингу, который на ваш взгляд простой и безопасный. После этого вы запустили тесты и увидели, что что-то сломалось. Но перед этим вы уже сделали десять маленьких изменений и не знаете какое из них поломало программу. Решение заключалось в более частом запуске тестов (после каждого изменения), но вы забывали сделать это.
Что я хочу, так это иметь возможность, чтобы моя среда разработки (IDE) автоматически запускала тесты каждый раз, когда я делаю изменения в коде. Этот способ подразумевает, что когда я делаю десять маленьких изменений, то и IDE запускает тесты десять раз. И тогда в тот момент, когда вы делаете что-то, как вы думаете, простое, но которое в реальности ломает программу, IDE укажет вам на ваши ошибки. Вы сможете просто нажать Ctrl+z (отмена) и получить обратно работающий код.
Что мне нужно, так это то, чтобы моя IDE запускала тесты каждый раз, как только я сохраняю код. Для этого тесты должны быть быстрыми, поскольку мое терпение после нажатия Ctrl+s составляет только 2 секунды. Что-либо длящееся больше будет меня раздражать. Если ваш набор тестов прогоняется медленно, то сделайте им рефакторинг.
Эта техника подходит только к быстрым модульным тестам (unit-test). Я не запускаю мои сценарные тесты как событие по Ctrl+s.
Я знаю, как это сделать в Eclipse, но, возможно, те из вас, кто пользуется другими IDE, смогут сделать подобную вещь. Я уже подготовился и создал проект, который вы можете скачать.
Вот какая была последовательность действий.
- Создайте проект. Eclipse имеет такую удобную вещь как запуск компиляции в фоновом режиме при каждом сохранении.
- Создайте код для junit для запуска ваших тестов, как это показано здесь: AllTests.java
import junit.framework.TestSuite; import junit.textui.TestRunner; public class AllTests { public static void main(String[] args) { TestSuite suite = new TestSuite(); suite.addTestSuite(GreeterTest.class); TestRunner.run(suite); } }
- Создайте ant файл, который будет запускать ваш тест из папки для скомпилированных файлов eclipse. В этом файле не будет инструкций для компиляции — это сделает за вас eclipse:
build.xml
<project> <target name="eclipse-test-runner"> <java classname="AllTests" classpath="bin:libs/junit.jar"> </java> </target> </project>
- Укажите eclipse? у запускать ant-цель (target) после каждой компиляции. Для этого надо создать новый сборщик (builder).
- Откройте свойства проекта, выбрав пункт меню Project -> Properties.
- Добавьте новый «Ant Builder» сборщик после Java Builder: Builders -> New… -> Ant Builder.
- Дайте вашему сборщику красивое имя. И сделайте следующее на каждой вкладке (я считаю, что в eclipse содержится баг, и вы должны каждый раз нажимать Apply (применить) каждый раз, когда вы изменили данные в вкладке):
- Main: Выберите сборочный файл и базовую директорию (это устанавливает какой ant-файл использовать).
- Targets: Выберите вашу ant-цель для: «After Clean», «Manual Build», и «Auto Build» (наиболее важная) (Это указывает, что после каждой компиляции должна быть выполнена ant-цель).
- Build Options: Установите флаг «Specify working set» и выберите все ваши папки с исходниками. (Это определяет изменения в каких файлах будет вызывать этот сборщик — в
нашем случае, это изменения любого файла.)
Создание сборщика (Ant Builder):
Вкладка Main:
Вкладка Targets:
Пример запуска: (не очень хорошее качество, но разобрать можно)
Или просто скачайте (zip) их моего репозитория проект, импортируйте его в eclipse и пробуйте.
Удачного тестирования...
Об авторе: Мишко Хевери (Miško Hevery)
- Блог. Многие статьи автора можно встретить в блоге Google Testing Blog.
- Об авторе (англ.)
… работает В Google инструктором по Гибкой методологии разработки (Agile Coach)и обучает гуглеров культуре автоматического тестирования. Его деятельность помогает Google выпускать частые релизы веб-приложений с постоянно высоким качеством. До этого Миско работал в Adobe, Sun Microsystems, Intel и Xerox (и это не полный список), где он стал экспертом в разработке веб-приложений на Java, JavaScript, Flex и ActionScript. Он много участвует в Open Source сообществе и является автором нескольких проектов с открытим кодом. Недавние его интересы в Разработке через тестирование (Test-Driven-Development ) вылились в реализацию Обозревателя тестируемости (Testability Explorer) и в JsTestDriver, с которыми он надеятся изменить культуру тестирования в open source сообществе.
Проекты с открытым кодом:
- http://code.google.com/p/js-test-driver
- http://www.testabilityexplorer.org/
- http://code.google.com/p/classpath-explorer/
- http://code.google.com/p/testability-explorer/
- http://code.google.com/p/google-singleton-detector/
- http://code.google.com/p/flexcalendar/
Upd 1: существуют хорошие плагины для Eclipse и IntelliJ, которые помогают автоматически запускать тесты — Infinitest
Upd 2: Перевел статью, которая даст дает объяснение понятию модульного теста и избавит от некоторых вопросов в комментариях.