[Основы 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose