[Тестирование программного обеспечения] Подробное объяснение 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
Учебное пособие по 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 и детали кода