Тестирование с JUnit 4.

Тестирование написанных вами программ — это важный этап жизненного цикла разработки программного обеспечения. На этапе тестирования выявляются ошибки и недостатки разрабатываемой программы. Поэтому данному этапу следует уделять большое внимание. Сейчас тестирование — это не просто ручной запуск программ и проверка на разных исходных данных. В современной разработке ПО выделяют несколько основных типов тестирования:

  • Модульное (unit) — тестирование — заключается в тестировании только части некоторого функционала, а не всего продукта  в целом. Проект разбивается на мелкие детали и проверяются конкретные его части, например, правильность работы конкретно взятой функции. Таким образом, если вы достаточно покроете ваш код тестами, то быстро локализуете все ошибки. Теме модульного тестирования посвящена данная статья.
  • Интеграционное тестирование — это тестирование взаимодействия компонентов внутри системы. На первый взгляд, звучит непросто. На этом этапе берутся модули, использованные при проведении модульного тестирования и объединяются в группы, для которых также будут выполнены определенные тесты. Для автоматизации данного процесса используются системы непрерывной интеграции — Continuous Integration (CI). Например, TeamCity.
  • Системное тестирование — проводится после выполнения модульного и интеграционного тестирования. Заключается в тестировании всей системы целиком. Зачастую данный этап также подвергается автоматизации.

Фреймворк JUnit 4.

JUnit 4 — это популярный фреймворк для выполнения модульного тестирования на Java. В своей четвертой версии для создания тестов позволяет использовать аннотации. Теперь перейдем к практике. Создадим новый проект. Я работаю в Intellij Idea от JetBrains и в качестве сборщика буду использовать Maven. После создания проекта его структура выглядит следующим образом:

maven_test

Обратите внимание на папку test и выделенную зеленым цветом папку java. Это говорит о том, что в данной директории будут храниться ваши тесты. Изменить директорию для тестов можно в настройках проекта. Теперь не забудьте добавить в файл pom.xml проекта следующую зависимость:

На момент написания статьи последняя версия — 4.12. Готово. Теперь мы можем использовать JUnit.

Пусть у нас имеется класс Multiplier с методом mul(int a, int b), перемножающим два числа и мы хотим протестировать правильность работы этого метода. Для этого создадим новый класс MultiplierTest в нашей тестовой директории и напишем первый тест.

Для создания тестового метода достаточно пометить его аннотацией @Test. Внутри метода testMultiple() мы создаем объект тестируемого класса и используем метод assertEquals() для сравнения ожидаемого результата (10) с результатом, который вернет метод при получении заданных параметров (множители 3 и 2). Очевидно, что в данном случае тест завалится и вы получите соответствующее сообщение об ошибке. Для запуска теста просто щелкните по нему правой кнопкой мыши и нажмите Run.

junit_not_equals

Аннотации.

Для начала перечислим основные аннотации, используемые в JUnit.

@Test — используется для обозначения тестового метода.

@Test(expected = Exception.class) — ожидается, что в данном методе будет выброшено исключение Exception.

@Test(timeout = 1000) — ожидается, что выполнение данного метода займет 1000 миллисекунд или 1 секунду.

@BeforeClass — данный метод будет вызываться перед началом всех тестовых методов.

@AfterClass — данный метод будет вызываться после выполнения всех тестовых методов. Например, для освобождения ресурсов.

@Before — данный метод выполняется перед началом каждого теста.

@After — данный метод выполняется в конце каждого теста.

@Ignore — данный тестовый метод должен быть проигнорирован. Например, вы хотите отложить исправление ошибки до лучших времен, но этот тест всегда заваливается.

Параметризованные тесты.

Если Вы хотите отделить данные теста от кода самого теста, то можно воспользоваться параметризованными аннотациями. Для возможности их использования пометьте ваш тестовый класс аннотацией @RunWith с параметром Parametrized.class.

Далее тестовый класс должен содержать статический метод, возвращающий коллекцию, содержащую вашу тестовую выборку. Метод должен быть помечен аннотацией @Parameters. Далее мы объявим две публичные переменные, соответствующие множителям и пометим их аннотацией @Parameter. В итоге тест будет выполняться по нашим параметрам для всей нашей тестовой выборки.

Тест завалится на третьей паре значений, в чем вы можете убедиться самостоятельно. А на этом наша статья подошла к концу. Успехов в тестировании!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *