Введение
JUnit — это среда модульного тестирования для языка программирования Java. JUnit имеет очень важное развитие в разработке, управляемой тестированием, и является одной из сред модульного тестирования, известных под общим названием xUnit, происходящих из JUnit.
выгода
- Вы можете написать серию тестовых методов для модульного тестирования всех интерфейсов или методов проекта.
- После запуска тест автоматизируется и результат выполнения оценивается без вмешательства человека.
- Вам нужно только проверить окончательный результат, чтобы узнать, является ли интерфейс метода всего проекта гладким.
- Каждый модульный тестовый пример относительно независим, запускается Junit и вызывается автоматически. Нет необходимости добавлять дополнительные операторы вызова.
- Добавляйте, удаляйте и экранируйте методы тестирования, не затрагивая другие методы тестирования. Платформы с открытым исходным кодом имеют соответствующую поддержку JUnit.
Конфигурация среды
С официального сайтаwww.junit.orgЗагрузите zip-файл последней версии JUnit.
Автор использует Maven (инструмент управления пакетами Java) для импорта необходимого пакета jar:
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
Основное использование
Тестовый код и сгенерированный код размещаются отдельно, и каталог Maven по умолчанию как раз символизирует это требование.
тестируемый кодmain
внизjava
каталог, тестовый код junit помещается вtest
внизjava
В справочнике формируется взаимно однозначное соответствие, и тестовый код используетTest
имя в начале.
провереноMessageDemo
Код:
контрольная работаTestMessageDemo
Код:
Основы уже написаны, но как запустить тесты? Вам также необходимо создать файл для запуска тестов:
ОК, запустите тест:
Видетьtrue
Указывает, что тест прошел успешно, тогда давайте попробуем, что произойдет, если тест не пройден.
ИсправлятьTestMessageDemo
Код:
Повторите тест:
Результат тестаfalse
и укажите ожидаемый результат выводаNo
и фактический результат выводаHelloWorld
.
Утверждения JUnit
Что такое утверждение? Я тоже сначала растерялся, но мне потребовалось много времени, чтобы понять, что утверждение - это "суждение".
Все утверждения Junit содержатся в классе Assert.
Этот класс предоставляет множество полезных методов утверждения для написания тестовых случаев. Регистрируются только ошибочные утверждения. Ниже перечислены некоторые полезные методы класса Assert:
-
void assertEquals(boolean expected, boolean actual)
: проверьте, сбалансированы ли две переменные или уравнения -
void assertTrue(boolean expected, boolean actual)
: проверить, верно ли условие -
void assertFalse(boolean condition)
: условие проверки ложно -
void assertNotNull(Object object)
: проверить, что объект не нулевой -
void assertNull(Object object)
: проверить, является ли объект пустым -
void assertSame(boolean condition)
Метод :assertSame() проверяет, указывают ли два связанных объекта на один и тот же объект. -
void assertNotSame(boolean condition)
Метод :assertNotSame() проверяет, не указывают ли два связанных объекта на один и тот же объект. -
void assertArrayEquals(expectedArray, resultArray)
Метод :assertArrayEquals() проверяет, равны ли два массива.
Аннотации JUnit
-
@Test
: эта аннотация указывает, что открытый метод void, прикрепленный к JUnit, может использоваться в качестве тестового примера. -
@Before
: Некоторые тесты перед запуском должны создать несколько похожих объектов. Эта аннотация добавляется к публичному методу void, поскольку этот метод необходимо запустить перед тестовым методом. -
@After
: Если вы выделяете внешние ресурсы в методе «До», то вам нужно освободить их после запуска теста. Эта аннотация добавляется к публичному методу void, поскольку этот метод необходимо запускать после тестового метода. -
@BeforeClass
: эта аннотация добавляется к публичному методу void, поскольку этот метод необходимо запускать перед всеми методами в классе. -
@AfterClass
: это приведет к выполнению метода после завершения всех тестов. Это можно использовать для уборки. -
@Ignore
: эта аннотация используется для игнорирования тестов, которые не нужно выполнять.
Процесс выполнения аннотации JUnit
-
beforeClass()
: Метод выполняется первым и только один раз. -
afterClass()
: Метод выполняется последним и только один раз. -
before()
Метод : выполняется для каждого тестового примера, но до выполнения тестового примера. -
after()
Метод : выполняется для каждого теста, но после выполнения теста. - Между методом before() и методом after() выполняется каждый тестовый пример.
JUnit выполняет тесты
Тестовые случаи выполняются с использованием класса JUnitCore. JUnitCore — это фасадный класс для запуска тестов. Чтобы запустить тесты из командной строки, вы можете запуститьjava org.junit.runner.JUnitCore
. Только для одного тестового прогона можно использовать статические методы.runClasses(Class[])
.
Набор тестов JUnit
Набор тестов означает объединение нескольких модульных тестов и их совместное выполнение. В JUnit,@RunWith
и@Suite
Аннотации используются для запуска наборных тестов.
провереноMessageDemo
Код:
Создайте два новых тестовых класса для отображения наборов тестов:
контрольная работаTestMessageDemo
Код:
контрольная работаTestMessageDemo2
Код:
TestSuite
Код:
TestRunner
Код:
Результаты теста:
Таким образом, мы можем запустить несколько тестов одновременно, и это не выглядит очень сложным!
Тест времени JUnit
Если тестовый пример занимает больше времени, чем указанное количество миллисекунд, Junit автоматически пометит его как не пройденный.timeout
параметры и@Test
используется вместе с аннотациями. Это очень мощно?
нравится:
@Test(timeout=1000)
Единицей времени являются миллисекунды.
Тестирование исключений JUnit
Junit предоставляет возможность отслеживать исключения с помощью обработки кода. Вы можете протестировать код, если он выдает желаемое исключение.expected
параметры и@Test
используется вместе с аннотациями.
Например:
@Test(expected = ArithmeticException.class)
Параметризованные тесты JUnit
Junit 4 представляет новый функциональный параметризованный тест. Параметризованные тесты позволяют разработчикам запускать один и тот же тест снова и снова с разными значениями. Вы выполните 5 шагов, чтобы создать параметризованный тест.
- использовать
@RunWith(Parameterized.class)
аннотировать тестовый класс. - Создать
@Parameters
Аннотированный общедоступный статический метод, который возвращает коллекцию (массив) объектов в качестве коллекции тестовых данных. - Создайте общедоступный конструктор, который принимает то же самое, что и строка тестовых данных.
- Создайте переменную экземпляра для каждого столбца тестовых данных.
- Создавайте свои тестовые примеры, используя переменные экземпляра в качестве источника тестовых данных.
Тестовый пример будет вызываться, как только появится каждая строка данных.
Пример параметрического теста
тестируемый кодPrimeNumberChecker
:
тестовый кодTestPrimeNumberChecker
:
код тестового запускаTestRunner
:
Результаты тестового запуска: