Как создать тестовый класс Java_Напишите класс в Java
Как создать тестовый класс Java_Напишите класс в Java

Основы JUnit и первый пример модульного теста (JUnit3.8)

JUnitОсновы и первый блоктестПример(JUnit3.8)

Модульное тестирование

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

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

Модульное тестирование в основном используется для определения того, соответствуют ли результаты выполнения программы ожидаемым результатам.

  Ключ заключается в использованииТестовый пример

JUnit

JUnit — это среда модульного тестирования для языка Java.

  Домашняя страница проекта:http://junit.org/

Многие IDE для Java, такие как Eclipse, интегрируют JUnit. Вам нужно только добавить библиотеку в путь сборки и выбрать версию, которую вы хотите использовать.

Двумя основными версиями JUnit являются JUnit 3.8 и JUnit 4. Первая использует отражение, а вторая — отражение и аннотации.

Обзор блога: В последний раз в этом блоге JUnit был представлен после размышлений и аннотаций:

http://www.cnblogs.com/mengdd/archive/2013/02/02/2890204.html

Используйте примеры, чтобы проиллюстрировать использование модульного тестирования:

1. Напишите исходный код целевого класса.

Создайте новый проект с именем JUnitTest, сначала напишите целевой класс Calculator:

Язык кода:javascript
копировать
package com.mengdd.junit;

public class Calculator
{
    public int add(int a, int b)
    {
        return a + b;
    }
    
    public int subtract(int a, int b)
    {
        return a - b;
    }
    
    public int multiply(int a, int b)
    {
        return a * b;
    }

    public int divide(int a, int b)
    {
        return a / b;
    }
}

2. Добавьте библиотеку JUnit.

Затем, чтобы использовать JUnit, вам необходимо добавить библиотеку:

  Щелкните правой кнопкой мыши и выберите элементProperties->левая сторонаJava Build Path->ЭтикеткаLibraries->Add Library…

Во всплывающем диалоговом окне выберите JUnit, затем Далее, а затем выберите JUnit 3 или JUnit 4.

В примере в этой статье выбран JUnit 3.

3. Создайте тестовый класс

Здесь необходимо отметить следующие моменты:

1. Рекомендации по использованию JUnit: необходимо разделить исходный и тестовый код.

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

Но файлы классов, скомпилированные из классов в этих двух папках, будут находиться в одной папке bin.

2. Тестовый класс и целевой класс исходного кода должны находиться в одном пакете, то есть имена их пакетов должны быть одинаковыми.

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

3. Правила именования тестовых классов

Добавьте Test до или после имени тестируемого класса.

После завершения этого шага каталог проекта будет следующим:

4. Написание тестового кода

Тестовые классы должны наследовать от класса TestCase.

Описание документа TestCase:

public abstract class TestCase extends Assert implements Test

A test case defines the fixture to run multiple tests.

To define a test case 1) implement a subclass of TestCase 2) define instance variables that store the state of the fixture 3) initialize the fixture state by overriding setUp 4) clean-up after a test by overriding tearDown. Each test runs in its own fixture so there can be no side effects among test runs.

(Ссылка на сетевой диск на документ JUnit будет приведена в справочных материалах в конце статьи. При необходимости вы можете скачать ее)

Еще есть очень важный класс Assert, см. документацию, все методы static void.

Требования к методам в тестовых классах:

В JUnit 3.8 методы тестирования должны соответствовать следующим принципам:

1.общественный.

2.пустота.

3. Нет параметров метода.

4. Имя метода должно начинаться с test. (Он находит все методы посредством отражения, а затем находит те, которые начинаются с test).

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

Удаление некоторых методов не повлияет на другие методы.

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

Подводя итог, напишите код следующим образом:

Язык кода:javascript
копировать
package com.mengdd.junit;
import junit.framework.Assert;
import junit.framework.TestCase;
public class CalculatorTest extends TestCase
{
public void testAdd()
{
Calculator calculator = new Calculator();
int result = calculator.add(1, 2);
// Определить возвращаемый результат метода
Assert.assertEquals(3, result);// Первый параметр — ожидаемое значение, второй параметр — значение, которое необходимо проверить.
    }
public void testSubtract()
{
Calculator calculator = new Calculator();
int result = calculator.subtract(1, 2);
// Определить возвращаемый результат метода
Assert.assertEquals(-1, result);// Первый параметр — ожидаемое значение, второй параметр — значение, которое необходимо проверить.

}
public void testMultiply()
{
Calculator calculator = new Calculator();
int result = calculator.multiply(2, 3);
// Определить возвращаемый результат метода
Assert.assertEquals(6, result);// Первый параметр — ожидаемое значение, второй параметр — значение, которое необходимо проверить.

}
public void testDivide()
{
Calculator calculator = new Calculator();
int result = calculator.divide(12, 3);
// Определить возвращаемый результат метода
Assert.assertEquals(4, result);// Первый параметр — ожидаемое значение, второй параметр — значение, которое необходимо проверить.

}
}

  Запустите его: щелкните правой кнопкой мыши класс и выберите «Выполнить». As->JUnit Test

(Вы можете щелкнуть здесь правой кнопкой мыши и выбрать «Выполнить», чтобы запустить повторно)

JUnitлозунг: Оставляйте полосу зеленой, чтобы код оставался чистым.

5. Реконструкция кода: использование метода setUp().

  Есть принцип:DRY(Don’t Repeat Yourself)

Поэтому код подвергается рефакторингу и часть повторной генерации объектов помещается в метод setUp().

(При переписывании изменение становится общедоступным, и нет проблем с расширением области доступа при наследовании.)

Сначала выполните тестовый метод:

Добавьте следующий код в класс CalculatorTest:

Язык кода:javascript
копировать
    @Override
public void setUp() throws Exception
{
System.out.println("set up");
}
@Override
public void tearDown() throws Exception
{
System.out.println("tear down");
}

После повторного запуска вывод в консоли будет следующим:

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

setUp() выполняется перед каждым тестовым примером, а TearDown() выполняется после каждого тестового примера.

То есть для каждого тестового примера порядок выполнения следующий:

  1.setUp()

  2.testXXX()

  3.tearDown()

Рефакторинг: используйте переменные-члены для создания объектов (чтобы их можно было использовать в каждом методе) и поместите оператор, генерирующий объект, в setUp(). Обратите внимание, что здесь для каждого тестового примера будет создан новый объект.

Рефакторинг кода выглядит следующим образом:

Язык кода:javascript
копировать
package com.mengdd.junit;
import junit.framework.Assert;
import junit.framework.TestCase;
public class CalculatorTest extends TestCase
{
private Calculator calculator = null;
@Override
public void setUp() throws Exception
{
System.out.println("set up");
// Создать экземпляр переменной-члена
calculator = new Calculator();
System.out.println(calculator);
}
@Override
public void tearDown() throws Exception
{
System.out.println("tear down");
}
public void testAdd()
{
int result = calculator.add(1, 2);
// Определить возвращаемый результат метода
Assert.assertEquals(3, result);// Первый параметр — ожидаемое значение, второй параметр — значение, которое необходимо проверить.
    }
public void testSubtract()
{
int result = calculator.subtract(1, 2);
// Определить возвращаемый результат метода
Assert.assertEquals(-1, result);// Первый параметр — ожидаемое значение, второй параметр — значение, которое необходимо проверить.

}
public void testMultiply()
{
int result = calculator.multiply(2, 3);
// Определить возвращаемый результат метода
Assert.assertEquals(6, result);// Первый параметр — ожидаемое значение, второй параметр — значение, которое необходимо проверить.

}
public void testDivide()
{
int result = calculator.divide(12, 3);
// Определить возвращаемый результат метода
Assert.assertEquals(4, result);// Первый параметр — ожидаемое значение, второй параметр — значение, которое необходимо проверить.

}
}

Вывод консоли после запуска:

Он показывает, что вызовы методов setUp() и TearDown() будут выполняться до и после каждого тестового метода, поэтому каждый раз генерируется новый объект и нет помех между различными методами.

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

Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/180901.html Исходная ссылка: https://javaforall.cn

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