[Тестирование программного обеспечения] Подробное объяснение JUnit
[Тестирование программного обеспечения] Подробное объяснение JUnit

1. Что такое Юнит?

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

Почему мне нужно изучать Junit после изучения Selenium? Selenium — это среда автоматизированного тестирования; Junit — это среда модульного тестирования. Используйте технологию для написания автоматических тестовых примеров (Selenium3). Проведите написанный тестовый пример технического управления (Junit5).

2. Общие аннотации в Junit

В этом разделе блога мы изучаем Junit5. Аннотации в Junit5 следующие:

аннотация

иллюстрировать

@Test

Определяет метод модульного тестирования.

@ParameterizedTest

Идентифицирует параметризованный метод тестирования.

@RepeatedTest

Определить повторяемые методы испытаний.

@TestFactory

Определяет метод динамического тестирования, используемый для создания тестовых примеров.

@BeforeEach

Выполняется перед каждым методом тестирования.

@AfterEach

Выполняется после каждого метода тестирования.

@BeforeAll

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

@AfterAll

Выполняется после всех методов тестирования только один раз.

@DisplayName

Задает отображаемое имя тестового класса или метода тестирования.

@Disabled

Идентифицирует отключенный тестовый класс или метод тестирования.

@Nested

Объявите внутренний тестовый класс.

@Tag

Добавляйте теги к тестовым классам или методам тестирования для группировки и фильтрации.

@Timeout

Установите таймаут выполнения тестового метода.

@ExtendWith

Зарегистрируйте расширение, чтобы расширить функциональность JUnit.

@RegisterExtension

Зарегистрируйте экземпляр расширения, чтобы расширить функциональность JUnit.

В приведенной выше таблице,Среди них обычно используется жирный шрифт.,Это также основное введение в аннотацию иллюстрировать.

Чтобы использовать среду Junit5, нам сначала нужно ввести зависимости Maven из центрального хранилища. Код выглядит следующим образом:

Язык кода:javascript
копировать
<dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.9.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-params</artifactId>
            <version>5.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite -->
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-suite</artifactId>
            <version>1.9.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.9.1</version>
            <scope>test</scope>
        </dependency>

1. @Test

@Test:используется для Определяет метод модульного тестирования.

Язык кода:javascript
копировать
    @Test
    void Test01() {
        System.out.println("Это Test01 в JunitTest");
    }

2. @BeforeAll & @AfterAll

@BeforeAll:Выполненный перед всеми методами тестирования, он будет выполнен только один раз. @AfterAll:Выполняется после всех методов тестирования только один раз.

Язык кода:javascript
копировать
    @Test
    void Test01() {
        System.out.println("Это Test01 в JunitTest");
    }
    @Test
    void Test02() {
        System.out.println("Это Test02 в JunitTest");
    }
    @BeforeAll
    static void SetUp() {
        System.out.println("Это утверждение в BeforeAll");
    }

    @AfterAll
    static void TearDown() {
        System.out.println("Это утверждение AfterAll");
    }

3. @BeforeEach & @AfterEach

@BeforeEach: Выполняется перед каждым методом тестирования. @AfterEach: Выполняется после каждого метода тестирования.

Язык кода:javascript
копировать
    @Test
    void Test01() {
        System.out.println("Это Test01 в JunitTest");
    }
    @Test
    void Test02() {
        System.out.println("Это Test02 в JunitTest");
    }
    @BeforeEach
    void BeforeEachTest() {
        System.out.println("Это оператор в BeforeEach");
    }

    @AfterEach
    void AfterEachTest() {
        System.out.println("Это утверждение в AfterEach");
    }

4. Параметризация @ParameterizedTest

@ParameterizedTest: Идентифицирует параметризованный метод тестирования.

один параметр

Язык кода:javascript
копировать
    @ParameterizedTest
    @ValueSource(ints = {1, 2, 3})
    void Test04(int num) {
        System.out.print(num);
    }
Язык кода:javascript
копировать
    @ParameterizedTest
    @ValueSource(strings = {"1", "2", "3"," "})
    void Test05(String number) {
        System.out.println(number);
        System.out.println("=============");
    }

Если вы хотите напечатать пробелы, используйте пустую строку

CSV получить параметры

Язык кода:javascript
копировать
    @ParameterizedTest
    @CsvFileSource(resources = "test01.csv")
    void Test06(String name) {
        System.out.println(name);
    }

resource:test01.csv:

Язык кода:javascript
копировать
Чжан Сан 1,Ли Си 1,Ван Ву1
Чжан Сан 2, Ли Сы 2, Ван Ву 2
Чжан Сан3,Джон Доу 3,1

Метод получения параметров

Язык кода:javascript
копировать
    public static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments(1, «Чжан Сан»),
                Arguments.arguments(2, «Ли Си»),
                Arguments.arguments(3, «Ван Ву»)
        );
    }	
    @ParameterizedTest
    @MethodSource("Generator")
    void Test07(int num, String name) {
        System.out.println(num + ":" + name);
    }

5. @Disabled

@Disabled: Идентифицирует отключенный тестовый класс или метод тестирования.

Язык кода:javascript
копировать
@Disabled
    void Test03() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(6)"));
    }

Выполните все найденные тестовые случаи:

Test03 не был выполнен.

6. @Order

@Order аннотацияда JUnit 5 аннотация используется для указания порядка выполнения тестовых методов. Добавлено путем предоставления тестового метода @Order аннотация и указание целочисленного значения гарантирует, что тестовые методы будут выполняться в указанном порядке.

Язык кода:javascript
копировать
import org.junit.jupiter.api.*;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
//@TestMethodOrder(MethodOrderer.Random.class)
public class JunitTest01 {
    @Order(2)
    @Test
    void B() {
        System.out.println("Сценарий использования "Лучший тест");
    }

    @Order(3)
    @Test
    void Test01() {
        System.out.println("Это вариант использования теста Test01");
    }

    @Order(1)
    @Test
    void A() {
        System.out.println("Сценарий использования Atest");
    }

    @Order(4)
    @Test
    void Test02() {
        System.out.testprintln("Игнорированный вариант использования");
    }

}

Как видите, порядок выполнения — это порядок, который мы указали вручную. В приведенном выше примере,@TestMethodOrder(MethodOrderer.OrderAnnotation.class) аннотация определяет использование OrderAnnotation сортировать методы тестирования. Затем каждый метод тестирования использует @Order аннотации указывают порядок, в котором они должны выполняться. Следует отметить, что:Порядок выполнения тестовых методов по умолчанию не определен..Так что используйте @Order аннотация может обеспечить последовательный и предсказуемый порядок выполнения.

3. Набор тестов

тест Пакет – это организация и реализация наборатестспособ。существоватьJUnitсередина,Можно использовать @RunWith аннотацияи Suite класс для создания наборов тестов.

1. Запустите тестовые примеры в классе

Язык кода:javascript
копировать
	@Suite
	//Выполняем вариант использования classtest
	@SelectClasses({JunitTest03.class, JunitTest.class, JunitTest01.class})
	public class RunSuite {
	}

2. Запуск тестовых случаев через пакеты

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

@Suite
@SelectPackages(value = {"Test09", "Test08"})
public class RunSuite {
}
Язык кода:javascript
копировать
package Test08;

import org.junit.jupiter.api.Test;

public class Test07 {
    @Test
    void Test007() {
        System.out.println("Test08 pacage Test007");
    }
}
Язык кода:javascript
копировать
package Test09;

import org.junit.jupiter.api.Test;

public class Test09 {
    @Test
    void Test01() {
        System.out.println("package test09 test01");
    }
}

4. Утверждение

существовать JUnit 5 В метод утверждения находится в org.junit.jupiter.api.Assertions сорт.

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

метод утверждения

иллюстрировать

assertEquals(expected, actual)

Убедитесь, что два объекта равны. Может использоваться для сравнения основных типов данных, объектов и массивов.

assertTrue(condition)

Убедитесь, что условие истинно. Если условие истинно, тест пройден; в противном случае тест не пройден.

assertFalse(condition)

Убедитесь, что условие ложно. Если условие ложно, тест пройден; в противном случае тест не пройден.

assertNull(actual)

Убедитесь, что объект имеет значение null. Если объект имеет значение null, тест проходит успешно; в противном случае тест не пройден.

assertNotNull(actual)

Убедитесь, что объект не равен нулю. Если объект не равен нулю, тест проходит успешно; в противном случае тест не пройден.

assertSame(expected, actual)

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

assertNotSame(unexpected, actual)

Убедитесь, что две ссылки на объекты не идентичны.

assertArrayEquals(expectedArray, actualArray)

Убедитесь, что два массива равны. Используется для сравнения того, равны ли элементы массива.

assertThrows(expectedType, executable)

Убедитесь, что блок кода генерирует исключение определенного типа.

assertTimeout(duration, executable)

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

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

public class MyTest {

    @Test
    public void test() {
        String str = "Hello, World!";
        int number = 42;
        boolean condition = true;

        assertEquals("Hello, World!", str);
        assertTrue(number > 0);
        assertFalse(condition);
        assertNull(null);
        assertNotNull(str);
    }
}

В приведенном выше примере.assertFalse(condition);Прямо сейчастестсередина Убедитесь, что ожидаемые результаты не соответствуют фактическим результатам..

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