Пример модульного теста Mockito + JUnit
Пример модульного теста Mockito + JUnit

Каталог статей

Предисловие

в повседневной жизни Java Во время разработки обычно требуется модульное тестирование, и Mock Тестирование — один из важных методов модульного тестирования. так называемый Mock Тестирование — это метод тестирования, в котором виртуальный объект используется для представления некоторых более сложных объектов, которые нелегко создать или получить в процессе тестирования, чтобы облегчить тестирование. Среди них этот виртуальный объект называется Mock Object, наиболее распространенным способом является его использование для представления Servlet середина HttpServletRequest объект,JDBC серединаиз ResultSet Объекты и т. д.

Используя Mock,Нам удалось уменьшить Модульное Проверка связи, если код середина имеет зависимость от других классов или интерфейса, через Mock Это может помочь нам смоделировать эти зависимости и помочь нам проверить вызываемое поведение зависимостей. проведение Mock,Мы можем проверить вызов определенных методов объекта,Сколько раз его называли,Каковы параметры метода?

Мы представили его раньше Junit Чтобы узнать о соответствующих знаниях, друзья, которые с этим не знакомы, могут прочитать мою предыдущую статью. -> пришло время обниматься JUnit Модуль протестирован! . но используйте JUnit Иногда проблема заключается в том, что для создания сложных объектов, которые трудно построить, нам может потребоваться много усилий. На этом этапе мы можем использовать Mock тест и JUnit Комбинированный.

в многочисленных Mock рамкасередина,Mockito Это относительно популярный фреймворк, и люди часто сравнивают его с JUnit используется в сочетании。Mockito позволяет нам создавать и настраивать Mock Object, тем самым максимально упрощая разработку внешне зависимых тестовых классов.

Обычно используйте Mockito Его можно разделить на следующие три этапа:

  1. первый,Издеваться и заменять внешние зависимости тестового кода середина.
  2. Во-вторых, выполните тестовый код.
  3. наконец,Убедитесь, что тестовый код выполняется правильно.

Давайте посмотрим, как его использовать Mockito + JUnit。

Создать проект и добавить зависимости

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

Maven Начало работы: использование IDEA создавать Maven проект | JavaPark

После завершения создания структура проекта будет такой, как показано на рисунке ниже.

Сразу после этого мы пошли на проект. pom.xml серединадобавить в Mockito и JUnit зависимость.

Язык кода:javascript
копировать
<dependencies>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.8.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>4.3.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

наконец получил pom.xml Содержимое файла следующее:

Язык кода:javascript
копировать
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
        <modelVersion>4.0.0</modelVersion>
    <groupId>site.cunyu1943</groupId>
    <artifactId>mockito-junit-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>mockito-junit-demo Tapestry 5 Application</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>4.3.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

Пишите код и тестируйте

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

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

Язык кода:javascript
копировать
public class Demo {
    public int sum(int start, int end) {
        int sum = 0;
        for (int i = start; i <= end ; i++) {
            sum += i;
        }
        return sum;
    }
}

Затем в Demo Класс серединащелкните правой кнопкой мыши, выберите выбор Generate,Появятся следующие элементы выбора,насвыбирать Test Чтобы автоматически генерировать тестовый код для этого класса.

выбирать Test После этого ИДЕЯ Соответствующий тестовый класс не будет сгенерирован сразу, но появится следующее окно конфигурации, которое мы можем настроить перед генерацией. Здесь следует отметить следующие основные моменты:

  1. Testing library:для тестированияиздобрый Библиотека,нас Как правило, тестыдавыбирать JUint4 или JUnit5
  2. Class name:тестдобрыйиз Имя класса, по умолчанию здесь обычно да Имя класса + Test,Вы можете изменить его в соответствии с вашими потребностями.
  3. Destination package:генерироватьизтестдобрыйрасположениеиз Сумка,Обычно да соответствует пакету, в котором находится указанный выше класс.
  4. Generate test methods for:В основном здесьдавыбирать需要генерироватьтестизметод,нижеиз Member середина, просто проверь это.

После завершения настройки IDEA будет внутри test/java Созданный пакет автоматически упаковывается в папку, и создается соответствующий тестовый класс. Окончательный автоматически созданный тестовый класс выглядит следующим образом.

Наконец, мы следуем Mock Три этапа тестирования используются для написания кода, а окончательный метод тестирования выглядит следующим образом.

Язык кода:javascript
копировать
class DemoTest {
    @Test
    void sum() {
        Demo demo = Mockito.mock(Demo.class);
        Mockito.when(demo.sum(1, 10)).thenReturn(55);
        Assertions.assertEquals(55, demo.sum(1, 10), «Результат не такой, как ожидалось»);
    }
}

Чтосередина,@Test да JUnit аннотация середина, используемая для обозначения методов тестирования.

Тогда приведенный выше код середина Нет. 4 Линия соответствует шагу тестирования середина, моделирующего внешние зависимости, создающего. Demo объект.

Нет. 5 строк соответствуют второму этапу тестирования середина.,Выполнить тестовый код,Затем верните результат выполнения.

Нет. 6 Строки соответствуют трем шагам тестирования середина для проверки правильности выполнения кода да. да в основном используется здесь Mockito Метод утверждения середина.

наконец,Выполнить метод тестового класса середина,если тест пройден,но IDEA середина появляется со следующими результатами.

Предположим, мы модифицируем приведенный выше код середина, чтобы утверждать ожидаемое значение середина.,Тест не пройден,в это время IDEA Будет возвращено быстрое сообщение для утверждения середина.

Язык кода:javascript
копировать
class DemoTest {
    @Test
    void sum() {
        Demo demo = Mockito.mock(Demo.class);
        Mockito.when(demo.sum(1, 10)).thenReturn(55);
        Assertions.assertEquals(56, demo.sum(1, 10), «Результат не такой, как ожидалось»);
    }
}

Подвести итог

Вышеуказанное содержание посвящено Mockito соответствовать JUnit руководить Модульное Это простой пример обучения, в основном с двух сторон. С одной стороны, как создать и добавить соответствующие зависимости? С другой стороны, как написать код и автоматически сгенерировать соответствующий тестовый класс, а затем написать тестовый код. И еще о Mockito Мы познакомим вас с навыками использования в другой статье середина.

boy illustration
40 вопросов для собеседований по SpringBoot, которые необходимо задавать на собеседованиях! При необходимости ответьте на вопросы для собеседования SpringBoot [предлагаемый сборник] [легко понять]
boy illustration
Через два года JVM может быть заменен GraalVM.
boy illustration
Разрешение циклических зависимостей Spring Bean: существует ли неразрешимая циклическая ссылка?
boy illustration
Разница между промежуточным программным обеспечением ASP.NET Core и фильтрами
boy illustration
[Серия Foolish Old Man] Ноябрь 2023 г. Специальная тема Winform Control Элемент управления DataGridView Подробное объяснение
boy illustration
.NET Как загрузить файлы через HttpWebRequest
boy illustration
[Веселый проект Docker] Обновленная версия 2023 года! Создайте эксклюзивный инструмент управления паролями за 10 минут — Vaultwarden
boy illustration
Высокопроизводительная библиотека бревен Golang zap + компонент для резки бревен лесоруба подробное объяснение
boy illustration
Концепция и использование Springboot ConstraintValidator
boy illustration
Новые функции Go 1.23: точная настройка основных библиотек, таких как срезы и синхронизация, значительно улучшающая процесс разработки.
boy illustration
[Весна] Введение и базовое использование AOP в Spring, SpringBoot использует AOP.
boy illustration
Чтобы начать работу с рабочим процессом Flowable, этой статьи достаточно.
boy illustration
Байтовое интервью: как решить проблему с задержкой сообщений MQ?
boy illustration
ASP.NET Core использует функциональные переключатели для управления реализацией доступа по маршрутизации.
boy illustration
[Проблема] Решение Невозможно подключиться к Redis; вложенное исключение — io.lettuce.core.RedisConnectionException.
boy illustration
От теории к практике: проектирование чистой архитектуры в проектах Go
boy illustration
Решение проблемы искажения китайских символов при чтении файлов Net Core.
boy illustration
Реализация легких независимых конвейеров с использованием Brighter
boy illustration
Как удалить и вернуть указанную пару ключ-значение из ассоциативного массива в PHP
boy illustration
Feiniu fnos использует Docker для развертывания учебного пособия по AList
boy illustration
Принципы и практика использования многопоточности в различных версиях .NET.
boy illustration
Как использовать PaddleOCRSharp в рамках .NET
boy illustration
CRUD используется уже два или три года. Как читать исходный код Spring?
boy illustration
Устраните проблему совместимости между версией Spring Boot и Gradle Java: возникла проблема при настройке корневого проекта «demo1» > Не удалось.
boy illustration
Научите вас шаг за шагом, как настроить Nginx.
boy illustration
Это руководство — все, что вам нужно для руководства по автономному развертыванию сервера для проектов Python уровня няни (рекомендуемый сборник).
boy illustration
Не удалось запустить docker.service — Подробное объяснение идеального решения ️
boy illustration
Настройка файлового сервера Samba в системе Linux Centos. Анализ NetBIOS (супер подробно)
boy illustration
Как настроить метод ssh в Git, как получить и отправить код через метод ssh
boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.