JUnit — это платформа Java для написания модулей времени выполнения. Он разработан с высоким качеством、Один из ключевых инструментов для поддерживаемых и масштабируемых Java-приложений. В этой статье будет подробно описано использование JUnit, включая установку JUnit.、Основное использование、общийаннотация、набор тестов、Параметрическое тестированиеи т. д.。
Прежде чем мы углубимся в JUnit, давайте сначала поймем, что такое модульное тестирование. Модульное тестирование — это метод тестирования программного обеспечения, используемый для проверки того, что наименьшая единица кода в приложении (обычно функция, метод или класс) работает должным образом. Цель модульного тестирования — изолировать различные части кода и гарантировать, что они функционируют в соответствии со спецификациями при независимом тестировании.
Чтобы использовать JUnit, сначала необходимо добавить библиотеку JUnit в ваш проект. Монтаж можно осуществить одним из двух способов:
junit-platform-console-standalone.jar
)。
Если в вашем проекте используется такой инструмент сборки, как Maven или Gradle, вы можете легко добавить зависимости JUnit. Вот пример использования Maven:
существоватьпроектизpom.xml
документсередина,Добавьте следующие зависимости JUnit:
<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 использует аннотации для идентификации методов тестирования. Вот простой пример:
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:
@Test
@Test
аннотациядля идентификациитестметод。JUnitвыполню все с@Test
аннотацияизметод,и сообщить результаты испытаний.
@Test
public void testAdd() {
// код теста
}
@Before
и @After
@Before
и@After
аннотацияиспользуется втестметод Дои После этого выполните некоторую настройку или очистку.。Это для подготовкитестсредаиресурсиз Инициализация очень полезна。
@Before
public void setUp() {
// Подготовка перед выполнением теста
}
@After
public void tearDown() {
// Уборка после выполнения теста
}
@BeforeEach
и @AfterEach
@BeforeEach
и@AfterEach
аннотацияи@Before
и@After
добрыйпохожий,Но они выполняются до и после каждого тестового метода.,Вместо выполнения на уровне тестового класса.
@BeforeEach
public void init() {
// Выполняйте инициализацию перед каждым методом тестирования.
}
@AfterEach
public void cleanup() {
// Выполняйте очистку после каждого метода тестирования.
}
@BeforeAll
и @AfterAll
@BeforeAll
и@AfterAll
аннотацияиспользуется втестдобрыйсерединаизвсетестметод Дои Выполнить один раз после。Обычно используется для выполнения глобальной инициализации.иочистка。
@BeforeAll
public static void initAll() {
// Выполняйте инициализацию перед всеми методами тестирования.
}
@AfterAll
public static void tearDownAll() {
// Выполните очистку после всех тестовых методов.
}
@Disabled
@Disabled
аннотациядля отключениятестметод。отмечен как@Disabled
изтестметодне будет выполнено。
@Disabled
@Test
public void disabledTest() {
// Этот метод тестирования отключен
}
В дополнение к общим аннотациям JUnit, представленным, JUnit 5 также предоставляет некоторые другие полезные аннотации выше, которые можно использовать для различной настройки и управления методом тестирования. Вот некоторые другие часто используемые аннотации JUnit:
@Timeout
@Timeout
аннотацияиспользуется для указаниятестметодизтайм-аут。еслитестметод Время выполнения превышает указанноеизтайм-аут,тест будет помечен как непройденный.
@Test
@Timeout(2) // Укажите таймаут 2 секунды
public void testWithTimeout() throws InterruptedException {
Thread.sleep(3000); // Этот метод тестирования завершится неудачей, поскольку время выполнения превышает 2 секунды.
}
@RepeatedTest
@RepeatedTest
аннотация用В重复бегатьтакой жеизтестметоднеоднократно。
@RepeatedTest(3) // Повторите 3 раза
public void repeatedTest() {
// Этот тестовый метод будет запущен 3 раза
}
@Tag
@Tag
аннотацияиспользуется длятестдобрыйилитестметод Добавить тег。Теги можно использовать для организацииифильтртест,Например, запускайте тест только для определенного тега.
@Tag("integration") // Добавьте тег «интеграция» в метод тестирования.
@Test
public void integrationTest() {
// Этот метод тестирования отмечен тегом «интеграция».
}
@DisplayName
@DisplayName
аннотацияиспользуется длятестдобрыйилитестметод Укажите индивидуальныйизотображаемое имя,Используется для более четкого описания теста.
@DisplayName("Custom Display Name") // Пользовательское отображаемое имя
@Test
public void customDisplayNameTest() {
// ...
}
@ExtendWith
@ExtendWith
аннотацияиспользуется для указания Расширять,расширениеJUnit Механизм плагинов в версии 5 может расширить функции среды тестирования. Общие расширения включают анализ параметров, условное тестирование, перехват тестов и т. д.
@ExtendWith(MyExtension.class) // Используйте собственные расширения
@Test
public void testWithCustomExtension() {
// ...
}
Еще некоторые часто используемые аннотации в Это Юнит 5,Они могут помочь вам более гибко контролировать и настраивать конфигурацию. На основе ваших потребностей в тестировании,Вы можете выбрать подходящуюкогдаизаннотацияоптимизироватькод теста。
набор тесты — это способ объединения нескольких тестовых классов для совместной работы. Юнит 5 введен более гибкий набор тестовмеханизм,проходить@RunWith
аннотацияопределитьнабор тесты больше не нужны.
Чтобы создать набор тестов,Можно использовать@SelectClasses
аннотацияуказать, чтобы включитьсуществовать套件серединаизтестдобрый,а затем использовать@RunWith
аннотациябегатьнабор тестов。
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
аннотация,Затем укажите тестовый параметр итест фабричного метода.
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 для тестирования простого класса калькулятора:
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
начало,и описать поведение используемого метода.
@Test
void testCalculateTotalAmount() {
// Название тестового метода должно описывать поведение тестового метода.
}
независимость:каждыйтестметод应Должен是相互独立из,Не должно зависеть от состояния других методов тестирования. Каждый метод тестирования следует запускать в чистой среде.,Не влияет на другие методы тестирования.
Комментарии и документация:длятестметодитестдобрыйдобавить ясностииз Комментарии и документация,Объяснить цель и ожидаемое поведение теста. Это поможет другим разработчикам понять цель теста.
утверждение:использоватьподходящийкогдаизутверждениечтобы убедиться, чтотестметодиз ХОРОШОдля。JUnitпредоставил Различныйутверждениеметод,нравитьсяassertEquals
、assertTrue
、assertNotNull
ждать,Выберите правильное утверждение в соответствии с вашими потребностями.
@Test
void testAddition() {
int result = calculator.add(2, 3);
assertEquals(5, result); // Проверить равенство
}
Тестирование исключений:对В可能抛出аномальныйизметод,Напишите соответствующееиз Тестирование исключений。использоватьassertThrows
чтобы проверить, соответствует ли ожидаемыйизаномальный。
@Test
void testDivisionByZero() {
assertThrows(ArithmeticException.class, () -> calculator.divide(5, 0));
}
Организационное тестирование:использоватьJUnitиз@BeforeAll
、@BeforeEach
、@AfterEach
и@AfterAll
аннотация来执ХОРОШО一次性из Подготовитьиочистка,и операции, выполняемые до и после каждого метода тестирования.
@BeforeEach
void setUp() {
// Выполняется перед каждым тестовым методом
}
@AfterEach
void tearDown() {
// Выполняется после каждого метода тестирования
}
Последовательность испытаний:По умолчанию,JUnit не гарантирует порядок выполнения тестовых методов. Убедитесь, что ваш метод тестирования независим,Не зависит от порядка выполнения.
набор тестов:JUnitпозволяет вам создаватьнабор тесты, группа связанных тестовых классов, работающих вместе. Это полезно для выполнения целых коллекций тестов.
Параметрическое тестирование:JUnit 5поддерживать Параметрическое тестирование,Позволяет запускать один и тот же метод тестирования несколько раз.,Но используя разные входные параметры. Это может значительно уменьшить избыточность кода.
Настройки тайм-аута:существоватьтестметодначальствоиспользовать@Timeout
аннотация Можно установитьтестметодиз最大执ХОРОШОчас间,чтобы избежать бесконечного ожидания.
@Test
@Timeout(5) // Установите максимальное время выполнения на 5 секунд.
void testTimeout() {
// ...
}
@Disabled
аннотацияотключитьтестметод。@Disabled
@Test
void testDisabled() {
// Этот метод тестирования отключен
}
Эти На что следует обратить внимание可以帮助ты编写更好изJUnitединицатест,Обеспечить ремонтопригодность и надежность теста. В соответствии с потребностями проекта,Вы также можете дополнительно изучить расширенные функции и расширения JUnit.
JUnit — одна из важнейших платформ разработки Java.,Это помогает вам писать высококачественные, удобные в сопровождении модули. В этой статье описываются основное использование JUnit, часто используемые аннотации, набор тестов, параметрическое тестирование и т. д.,Надеюсь, это будет полезно для вашей тестовой работы. в реальных проектах,Разумный модульный тест может улучшить качество, надежность и удобство сопровождения кода.,Так что выработайте привычку писать модульные тесты.
Информация об авторе Автор: Фаньи CSDN: https://techfaNY.blog.csdn.net Самородки: https://juejin.cn/user/4154386571867191 |
---|