Pull to refresh

Настройка IDE для автоматического запуска тестов

Reading time4 min
Views8.9K
Original author: Miško Hevery
Источник

Блог Google Testing

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

Опишу обычный сценарий разработки кода:

Ваши тесты «зеленые» и вы приступили к рефакторингу, который на ваш взгляд простой и безопасный. После этого вы запустили тесты и увидели, что что-то сломалось. Но перед этим вы уже сделали десять маленьких изменений и не знаете какое из них поломало программу. Решение заключалось в более частом запуске тестов (после каждого изменения), но вы забывали сделать это.


Что я хочу, так это иметь возможность, чтобы моя среда разработки (IDE) автоматически запускала тесты каждый раз, когда я делаю изменения в коде. Этот способ подразумевает, что когда я делаю десять маленьких изменений, то и IDE запускает тесты десять раз. И тогда в тот момент, когда вы делаете что-то, как вы думаете, простое, но которое в реальности ломает программу, IDE укажет вам на ваши ошибки. Вы сможете просто нажать Ctrl+z (отмена) и получить обратно работающий код.

Что мне нужно, так это то, чтобы моя IDE запускала тесты каждый раз, как только я сохраняю код. Для этого тесты должны быть быстрыми, поскольку мое терпение после нажатия Ctrl+s составляет только 2 секунды. Что-либо длящееся больше будет меня раздражать. Если ваш набор тестов прогоняется медленно, то сделайте им рефакторинг.

Эта техника подходит только к быстрым модульным тестам (unit-test). Я не запускаю мои сценарные тесты как событие по Ctrl+s.


Я знаю, как это сделать в Eclipse, но, возможно, те из вас, кто пользуется другими IDE, смогут сделать подобную вещь. Я уже подготовился и создал проект, который вы можете скачать.
Eclipse IDE
Вот какая была последовательность действий.
  1. Создайте проект. Eclipse имеет такую удобную вещь как запуск компиляции в фоновом режиме при каждом сохранении.
  2. Создайте код для 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);
       }
    }
    

  3. Создайте ant файл, который будет запускать ваш тест из папки для скомпилированных файлов eclipse. В этом файле не будет инструкций для компиляции — это сделает за вас eclipse:
    build.xml
    <project>
     <target name="eclipse-test-runner">
      <java classname="AllTests" classpath="bin:libs/junit.jar">
      </java>
     </target>
    </project>
    

  4. Укажите eclipse? у запускать ant-цель (target) после каждой компиляции. Для этого надо создать новый сборщик (builder).
    1. Откройте свойства проекта, выбрав пункт меню Project -> Properties.
    2. Добавьте новый «Ant Builder» сборщик после Java Builder: Builders -> New… -> Ant Builder.
    3. Дайте вашему сборщику красивое имя. И сделайте следующее на каждой вкладке (я считаю, что в 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 инструктором по Гибкой методологии разработки (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: Перевел статью, которая даст дает объяснение понятию модульного теста и избавит от некоторых вопросов в комментариях.
Tags:
Hubs:
Total votes 28: ↑21 and ↓7+14
Comments32

Articles