[Основы Java] Подробное объяснение использования Java JUnit.
[Основы Java] Подробное объяснение использования Java JUnit.

JUnit — это платформа Java для написания модулей времени выполнения. Он разработан с высоким качеством、Один из ключевых инструментов для поддерживаемых и масштабируемых Java-приложений. В этой статье будет подробно описано использование JUnit, включая установку JUnit.、Основное использование、общийаннотация、набор тестов、Параметрическое тестированиеи т. д.。

Что такое модульное тестирование?

Прежде чем мы углубимся в JUnit, давайте сначала поймем, что такое модульное тестирование. Модульное тестирование — это метод тестирования программного обеспечения, используемый для проверки того, что наименьшая единица кода в приложении (обычно функция, метод или класс) работает должным образом. Цель модульного тестирования — изолировать различные части кода и гарантировать, что они функционируют в соответствии со спецификациями при независимом тестировании.

Установка JUnit

Чтобы использовать JUnit, сначала необходимо добавить библиотеку JUnit в ваш проект. Монтаж можно осуществить одним из двух способов:

Способ 1. Загрузите и добавьте библиотеку JUnit вручную.
  1. доступJUnitофициальный сайт:https://junit.org/junit5/
  2. скачатьJUnitизJARдокумент(обычноjunit-platform-console-standalone.jar)。
  3. Добавьте загруженный файл JAR в путь к классам вашего проекта.
Способ 2. Используйте инструмент сборки (например, Maven или Gradle).

Если в вашем проекте используется такой инструмент сборки, как Maven или Gradle, вы можете легко добавить зависимости JUnit. Вот пример использования Maven:

Maven:

существоватьпроектизpom.xmlдокументсередина,Добавьте следующие зависимости JUnit:

Язык кода:javascript
копировать
<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.7.2</version> <!-- Возможно обновление до последней версии -->
        <scope>test</scope>
    </dependency>
</dependencies>

GradleПользователи могут получить доступ кbuild.gradleдокументсередина添加相应иззависит отдобрыйпохожийиздействовать。

Основное использование

После того, как в вашем проекте настроен JUnit, вы можете приступить к написанию тестовых примеров. JUnit использует аннотации для идентификации методов тестирования. Вот простой пример:

Язык кода:javascript
копировать
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class MyMathTest {

    @Test
    public void testAdd() {
        MyMath math = new MyMath();
        int result = math.add(2, 3);
        assertEquals(5, result);
    }
}

В приведенном выше примере,Мы создали файл под названиемMyMathTestизтестдобрый,Он содержит файл с именемtestAddизтестметод。ДолженметодиспользоватьassertEqualsутверждениеприди и проверьmath.add(2, 3)из Является ли результатждать В5。если не равно5,тест провалится.

Для запуска этого теста вы можете использовать свою IDE, например Eclipse или IntelliJ. IDEA) или используйте инструмент командной строки для выполнения JUnittest. Обычно,JUnitтестдобрыйиз Соглашение об именахсуществоватьдобрый Добавить после имениTest,Это помогает JUnit автоматически идентифицировать тестовые классы.

Общие аннотации JUnit

JUnit использует различные аннотации для управления поведением и конфигурацией теста. Вот некоторые часто используемые аннотации JUnit:

@Test

@Testаннотациядля идентификациитестметод。JUnitвыполню все с@Testаннотацияизметод,и сообщить результаты испытаний.

Язык кода:javascript
копировать
@Test
public void testAdd() {
    // код теста
}
@Before и @After

@Beforeи@Afterаннотацияиспользуется втестметод Дои После этого выполните некоторую настройку или очистку.。Это для подготовкитестсредаиресурсиз Инициализация очень полезна。

Язык кода:javascript
копировать
@Before
public void setUp() {
    // Подготовка перед выполнением теста
}

@After
public void tearDown() {
    // Уборка после выполнения теста
}
@BeforeEach и @AfterEach

@BeforeEachи@AfterEachаннотацияи@Beforeи@Afterдобрыйпохожий,Но они выполняются до и после каждого тестового метода.,Вместо выполнения на уровне тестового класса.

Язык кода:javascript
копировать
@BeforeEach
public void init() {
    // Выполняйте инициализацию перед каждым методом тестирования.
}

@AfterEach
public void cleanup() {
    // Выполняйте очистку после каждого метода тестирования.
}
@BeforeAll и @AfterAll

@BeforeAllи@AfterAllаннотацияиспользуется втестдобрыйсерединаизвсетестметод Дои Выполнить один раз после。Обычно используется для выполнения глобальной инициализации.иочистка。

Язык кода:javascript
копировать
@BeforeAll
public static void initAll() {
    // Выполняйте инициализацию перед всеми методами тестирования.
}

@AfterAll
public static void tearDownAll() {
    // Выполните очистку после всех тестовых методов.
}
@Disabled

@Disabledаннотациядля отключениятестметод。отмечен как@Disabledизтестметодне будет выполнено。

Язык кода:javascript
копировать
@Disabled
@Test
public void disabledTest() {
    // Этот метод тестирования отключен
}

Другие аннотации JUnit

В дополнение к общим аннотациям JUnit, представленным, JUnit 5 также предоставляет некоторые другие полезные аннотации выше, которые можно использовать для различной настройки и управления методом тестирования. Вот некоторые другие часто используемые аннотации JUnit:

@Timeout

@Timeoutаннотацияиспользуется для указаниятестметодизтайм-аут。еслитестметод Время выполнения превышает указанноеизтайм-аут,тест будет помечен как непройденный.

Язык кода:javascript
копировать
@Test
@Timeout(2) // Укажите таймаут 2 секунды
public void testWithTimeout() throws InterruptedException {
    Thread.sleep(3000); // Этот метод тестирования завершится неудачей, поскольку время выполнения превышает 2 секунды.
}
@RepeatedTest

@RepeatedTestаннотация用В重复бегатьтакой жеизтестметоднеоднократно。

Язык кода:javascript
копировать
@RepeatedTest(3) // Повторите 3 раза
public void repeatedTest() {
    // Этот тестовый метод будет запущен 3 раза
}
@Tag

@Tagаннотацияиспользуется длятестдобрыйилитестметод Добавить тег。Теги можно использовать для организацииифильтртест,Например, запускайте тест только для определенного тега.

Язык кода:javascript
копировать
@Tag("integration") // Добавьте тег «интеграция» в метод тестирования.
@Test
public void integrationTest() {
    // Этот метод тестирования отмечен тегом «интеграция».
}
@DisplayName

@DisplayNameаннотацияиспользуется длятестдобрыйилитестметод Укажите индивидуальныйизотображаемое имя,Используется для более четкого описания теста.

Язык кода:javascript
копировать
@DisplayName("Custom Display Name") // Пользовательское отображаемое имя
@Test
public void customDisplayNameTest() {
    // ...
}
@ExtendWith

@ExtendWithаннотацияиспользуется для указания Расширять,расширениеJUnit Механизм плагинов в версии 5 может расширить функции среды тестирования. Общие расширения включают анализ параметров, условное тестирование, перехват тестов и т. д.

Язык кода:javascript
копировать
@ExtendWith(MyExtension.class) // Используйте собственные расширения
@Test
public void testWithCustomExtension() {
    // ...
}

Еще некоторые часто используемые аннотации в Это Юнит 5,Они могут помочь вам более гибко контролировать и настраивать конфигурацию. На основе ваших потребностей в тестировании,Вы можете выбрать подходящуюкогдаизаннотацияоптимизироватькод теста。

набор тестов

набор тесты — это способ объединения нескольких тестовых классов для совместной работы. Юнит 5 введен более гибкий набор тестовмеханизм,проходить@RunWithаннотацияопределитьнабор тесты больше не нужны.

Чтобы создать набор тестов,Можно использовать@SelectClassesаннотацияуказать, чтобы включитьсуществовать套件серединаизтестдобрый,а затем использовать@RunWithаннотациябегатьнабор тестов。

Язык кода:javascript
копировать
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({TestClass1.class, TestClass2.class})
public class TestSuite {
    // Здесь не нужно писать код
}

Параметрическое тестирование

В JUnit 5 представлена ​​концепция Параметрического тестирования.,Позволяет легко запускать один и тот же метод тестирования несколько раз.,Но используя разные входные параметры. Это полезно для методов с несколькими входными комбинациями.

Чтобы создать Параметрическое тестирование,ты Можно использовать@ParameterizedTestаннотация,Затем укажите тестовый параметр итест фабричного метода.

Язык кода:javascript
копировать
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class ParameterizedMathTest {

    @ParameterizedTest
    @CsvSource({"2, 3, 5", "5, 7, 12", "10, 0, 10"})
    public void testAdd(int a, int b, int expected) {
        MyMath math = new MyMath();
        int result = math.add(a, b);
        assertEquals(expected, result);
    }
}

В приведенном выше примере,@CsvSourceпредоставилтестпараметр,Каждая группа параметров разделяется запятыми. Параметрическое тестирование запустит метод тестирования для каждого набора параметров.,и убедитесь, что ожидаемые результаты достигнуты.

Объяснение случая

Ниже приведен простой пример аннотации JUnit 5, который демонстрирует, как использовать JUnit для тестирования простого класса калькулятора:

Язык кода:javascript
копировать
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class CalculatorTest {
    private Calculator calculator;

    @BeforeEach
    void setUp() {
        // Инициализируйте объект «Калькулятор» перед каждым методом тестирования.
        calculator = new Calculator();
    }

    @Test
    void testAddition() {
        int result = calculator.add(2, 3);
        assertEquals(5, result); // Проверить равенство
    }

    @Test
    void testSubtraction() {
        int result = calculator.subtract(5, 3);
        assertEquals(2, result); // Проверить равенство
    }

    @Test
    void testMultiplication() {
        int result = calculator.multiply(2, 3);
        assertEquals(6, result); // Проверить равенство
    }

    @Test
    void testDivision() {
        int result = calculator.divide(6, 2);
        assertEquals(3, result); // Проверить равенство
    }

    @Test
    void testDivisionByZero() {
        assertThrows(ArithmeticException.class, () -> calculator.divide(5, 0));
    }
}

В этом примере мы используем следующие аннотации JUnit:

  • @BeforeEach:для маркировки Выполняется перед каждым тестовым методомизметод。В этом примере,нас Инициализируйте объект «Калькулятор» перед каждым методом тестирования.。
  • @Test:для маркировкитестметод。каждыйтестметоддолжно быть@Testаннотацияотметка。
  • assertEquals:JUnitизутверждениеметод№1,Используется для проверки равенства ожидаемого значения и фактического значения.
  • assertThrows:JUnitизутверждениеметод№1,Используется для проверки того, что было создано ожидаемое исключение.

В этом примере показаны основные методы математических операций класса Calculator.,Включая операции сложения, вычитания, умножения, деления и деления на ноль. JUnit упрощает тестирование благодаря аннотациииутверждениям,И предоставляет отчет об испытаниях и подробную информацию о результатах.

На что следует обратить внимание

При использовании JUnit для модульного тестирования возникают некоторые проблемы. что следует обратить обратите внимание на лучшие практики, обеспечивающие точность тестов и удобство обслуживания. Вот некоторые распространенные варианты использования JUnit. что следует обратить внимание:

Соглашение об именах:использоватьзначимыйиз Имя для идентификациитестметодитестдобрый。в целом,тестметодиз Имя должно заканчиваться наtestначало,и описать поведение используемого метода.

Язык кода:javascript
копировать
@Test
void testCalculateTotalAmount() {
    // Название тестового метода должно описывать поведение тестового метода.
}

независимость:каждыйтестметод应Должен是相互独立из,Не должно зависеть от состояния других методов тестирования. Каждый метод тестирования следует запускать в чистой среде.,Не влияет на другие методы тестирования.

Комментарии и документация:длятестметодитестдобрыйдобавить ясностииз Комментарии и документация,Объяснить цель и ожидаемое поведение теста. Это поможет другим разработчикам понять цель теста.

утверждение:использоватьподходящийкогдаизутверждениечтобы убедиться, чтотестметодиз ХОРОШОдля。JUnitпредоставил Различныйутверждениеметод,нравитьсяassertEqualsassertTrueassertNotNullждать,Выберите правильное утверждение в соответствии с вашими потребностями.

Язык кода:javascript
копировать
@Test
void testAddition() {
    int result = calculator.add(2, 3);
    assertEquals(5, result); // Проверить равенство
}

Тестирование исключений:对В可能抛出аномальныйизметод,Напишите соответствующееиз Тестирование исключений。использоватьassertThrowsчтобы проверить, соответствует ли ожидаемыйизаномальный。

Язык кода:javascript
копировать
@Test
void testDivisionByZero() {
    assertThrows(ArithmeticException.class, () -> calculator.divide(5, 0));
}

Организационное тестирование:использоватьJUnitиз@BeforeAll@BeforeEach@AfterEachи@AfterAllаннотация来执ХОРОШО一次性из Подготовитьиочистка,и операции, выполняемые до и после каждого метода тестирования.

Язык кода:javascript
копировать
@BeforeEach
void setUp() {
    // Выполняется перед каждым тестовым методом
}

@AfterEach
void tearDown() {
    // Выполняется после каждого метода тестирования
}

Последовательность испытаний:По умолчанию,JUnit не гарантирует порядок выполнения тестовых методов. Убедитесь, что ваш метод тестирования независим,Не зависит от порядка выполнения.

набор тестов:JUnitпозволяет вам создаватьнабор тесты, группа связанных тестовых классов, работающих вместе. Это полезно для выполнения целых коллекций тестов.

Параметрическое тестирование:JUnit 5поддерживать Параметрическое тестирование,Позволяет запускать один и тот же метод тестирования несколько раз.,Но используя разные входные параметры. Это может значительно уменьшить избыточность кода.

Настройки тайм-аута:существоватьтестметодначальствоиспользовать@Timeoutаннотация Можно установитьтестметодиз最大执ХОРОШОчас间,чтобы избежать бесконечного ожидания.

Язык кода:javascript
копировать
@Test
@Timeout(5) // Установите максимальное время выполнения на 5 секунд.
void testTimeout() {
    // ...
}
  1. Игнорировать тесты:существовать开发过程середина,Иногда вам может потребоваться игнорировать определенныетест。ты Можно использовать@Disabledаннотацияотключитьтестметод。
Язык кода:javascript
копировать
@Disabled
@Test
void testDisabled() {
    // Этот метод тестирования отключен
}
  1. Использование фиктивных объектов:когдатест依赖В外部ресурсили其他добрыйчас,Рассмотрите возможность использования фиктивных объектов для моделирования этих зависимостей.,изолировать тест и сделать его более надежным.

Эти На что следует обратить внимание可以帮助ты编写更好изJUnitединицатест,Обеспечить ремонтопригодность и надежность теста. В соответствии с потребностями проекта,Вы также можете дополнительно изучить расширенные функции и расширения JUnit.

Заключение

JUnit — одна из важнейших платформ разработки Java.,Это помогает вам писать высококачественные, удобные в сопровождении модули. В этой статье описываются основное использование JUnit, часто используемые аннотации, набор тестов, параметрическое тестирование и т. д.,Надеюсь, это будет полезно для вашей тестовой работы. в реальных проектах,Разумный модульный тест может улучшить качество, надежность и удобство сопровождения кода.,Так что выработайте привычку писать модульные тесты.

Информация об авторе Автор: Фаньи CSDN: https://techfaNY.blog.csdn.net Самородки: https://juejin.cn/user/4154386571867191

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода