Модульное тестирование с JUnit

Java

Введение

JUnit — это среда модульного тестирования для языка программирования Java. JUnit имеет очень важное развитие в разработке, управляемой тестированием, и является одной из сред модульного тестирования, известных под общим названием xUnit, происходящих из JUnit.

выгода

  1. Вы можете написать серию тестовых методов для модульного тестирования всех интерфейсов или методов проекта.
  2. После запуска тест автоматизируется и результат выполнения оценивается без вмешательства человека.
  3. Вам нужно только проверить окончательный результат, чтобы узнать, является ли интерфейс метода всего проекта гладким.
  4. Каждый модульный тестовый пример относительно независим, запускается Junit и вызывается автоматически. Нет необходимости добавлять дополнительные операторы вызова.
  5. Добавляйте, удаляйте и экранируйте методы тестирования, не затрагивая другие методы тестирования. Платформы с открытым исходным кодом имеют соответствующую поддержку 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Код:

MessageDemo

контрольная работаTestMessageDemoКод:

MessageDemo

Основы уже написаны, но как запустить тесты? Вам также необходимо создать файл для запуска тестов:

MessageDemo

ОК, запустите тест:

控制台输出

ВидетьtrueУказывает, что тест прошел успешно, тогда давайте попробуем, что произойдет, если тест не пройден.

ИсправлятьTestMessageDemoКод:

TestMessageDemo

Повторите тест:

控制台输出

Результат тестаfalseи укажите ожидаемый результат выводаNoи фактический результат выводаHelloWorld.

Утверждения JUnit

Что такое утверждение? Я тоже сначала растерялся, но мне потребовалось много времени, чтобы понять, что утверждение - это "суждение".

Все утверждения Junit содержатся в классе Assert.

Этот класс предоставляет множество полезных методов утверждения для написания тестовых случаев. Регистрируются только ошибочные утверждения. Ниже перечислены некоторые полезные методы класса Assert:

  1. void assertEquals(boolean expected, boolean actual): проверьте, сбалансированы ли две переменные или уравнения
  2. void assertTrue(boolean expected, boolean actual): проверить, верно ли условие
  3. void assertFalse(boolean condition): условие проверки ложно
  4. void assertNotNull(Object object): проверить, что объект не нулевой
  5. void assertNull(Object object): проверить, является ли объект пустым
  6. void assertSame(boolean condition)Метод :assertSame() проверяет, указывают ли два связанных объекта на один и тот же объект.
  7. void assertNotSame(boolean condition)Метод :assertNotSame() проверяет, не указывают ли два связанных объекта на один и тот же объект.
  8. void assertArrayEquals(expectedArray, resultArray)Метод :assertArrayEquals() проверяет, равны ли два массива.

Аннотации JUnit

  1. @Test: эта аннотация указывает, что открытый метод void, прикрепленный к JUnit, может использоваться в качестве тестового примера.
  2. @Before: Некоторые тесты перед запуском должны создать несколько похожих объектов. Эта аннотация добавляется к публичному методу void, поскольку этот метод необходимо запустить перед тестовым методом.
  3. @After: Если вы выделяете внешние ресурсы в методе «До», то вам нужно освободить их после запуска теста. Эта аннотация добавляется к публичному методу void, поскольку этот метод необходимо запускать после тестового метода.
  4. @BeforeClass: эта аннотация добавляется к публичному методу void, поскольку этот метод необходимо запускать перед всеми методами в классе.
  5. @AfterClass: это приведет к выполнению метода после завершения всех тестов. Это можно использовать для уборки.
  6. @Ignore: эта аннотация используется для игнорирования тестов, которые не нужно выполнять.

Процесс выполнения аннотации JUnit

  • beforeClass(): Метод выполняется первым и только один раз.
  • afterClass(): Метод выполняется последним и только один раз.
  • before()Метод : выполняется для каждого тестового примера, но до выполнения тестового примера.
  • after()Метод : выполняется для каждого теста, но после выполнения теста.
  • Между методом before() и методом after() выполняется каждый тестовый пример.

JUnit выполняет тесты

Тестовые случаи выполняются с использованием класса JUnitCore. JUnitCore — это фасадный класс для запуска тестов. Чтобы запустить тесты из командной строки, вы можете запуститьjava org.junit.runner.JUnitCore. Только для одного тестового прогона можно использовать статические методы.runClasses(Class[]).

Набор тестов JUnit

Набор тестов означает объединение нескольких модульных тестов и их совместное выполнение. В JUnit,@RunWithи@SuiteАннотации используются для запуска наборных тестов.

провереноMessageDemoКод:

MessageDemo

Создайте два новых тестовых класса для отображения наборов тестов:

контрольная работаTestMessageDemoКод:

MessageDemo

контрольная работаTestMessageDemo2Код:

TestMessageDemo2

TestSuiteКод:

carbon (1).png

TestRunnerКод:

carbon (2).png

Результаты теста:

控制台输出

Таким образом, мы можем запустить несколько тестов одновременно, и это не выглядит очень сложным!

Тест времени JUnit

Если тестовый пример занимает больше времени, чем указанное количество миллисекунд, Junit автоматически пометит его как не пройденный.timeoutпараметры и@Testиспользуется вместе с аннотациями. Это очень мощно?

нравится:

@Test(timeout=1000)

Единицей времени являются миллисекунды.

Тестирование исключений JUnit

Junit предоставляет возможность отслеживать исключения с помощью обработки кода. Вы можете протестировать код, если он выдает желаемое исключение.expectedпараметры и@Testиспользуется вместе с аннотациями.

Например:

@Test(expected = ArithmeticException.class)

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

Junit 4 представляет новый функциональный параметризованный тест. Параметризованные тесты позволяют разработчикам запускать один и тот же тест снова и снова с разными значениями. Вы выполните 5 шагов, чтобы создать параметризованный тест.

  • использовать@RunWith(Parameterized.class)аннотировать тестовый класс.
  • Создать@ParametersАннотированный общедоступный статический метод, который возвращает коллекцию (массив) объектов в качестве коллекции тестовых данных.
  • Создайте общедоступный конструктор, который принимает то же самое, что и строка тестовых данных.
  • Создайте переменную экземпляра для каждого столбца тестовых данных.
  • Создавайте свои тестовые примеры, используя переменные экземпляра в качестве источника тестовых данных.

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

Пример параметрического теста

тестируемый кодPrimeNumberChecker:

PrimeNumberChecker

тестовый кодTestPrimeNumberChecker:

TestPrimeNumberChecker

код тестового запускаTestRunner:

TestRunner

Результаты тестового запуска:

控制台输出