модульный тест testing) , относится к проверке и проверке наименьшего тестируемого модуля программного обеспечения.
Модульное тестирование предназначено не для того, чтобы доказать вашу правоту, а для того, чтобы доказать, что вы не ошибаетесь.
Модульное тестирование в основном используется для определения того, соответствуют ли результаты выполнения программы ожидаемым результатам.
Ключ заключается в использованииТестовый пример 。
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
Создайте новый проект с именем JUnitTest, сначала напишите целевой класс Calculator:
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;
}
}
Затем, чтобы использовать JUnit, вам необходимо добавить библиотеку:
Щелкните правой кнопкой мыши и выберите элементProperties->левая сторонаJava Build Path->ЭтикеткаLibraries->Add Library…
Во всплывающем диалоговом окне выберите JUnit, затем Далее, а затем выберите JUnit 3 или JUnit 4.
В примере в этой статье выбран JUnit 3.
Здесь необходимо отметить следующие моменты:
1. Рекомендации по использованию JUnit: необходимо разделить исходный и тестовый код.
Таким образом, вы можете создать новую папку исходного кода с именем test для хранения исходного кода тестового класса. Таким образом, тестовая программа может быть удалена при ее выпуске.
Но файлы классов, скомпилированные из классов в этих двух папках, будут находиться в одной папке bin.
2. Тестовый класс и целевой класс исходного кода должны находиться в одном пакете, то есть имена их пакетов должны быть одинаковыми.
Таким образом, тестовому классу не нужно импортировать пакет, в котором находится исходный код, поскольку они находятся в одном пакете.
3. Правила именования тестовых классов:
Добавьте Test до или после имени тестируемого класса.
После завершения этого шага каталог проекта будет следующим:
Тестовые классы должны наследовать от класса 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).
Тестовые случаи должны поддерживать полную независимость, и никакие зависимости не допускаются.
Удаление некоторых методов не повлияет на другие методы.
Мы не можем полагаться на порядок выполнения тестовых методов.
Подводя итог, напишите код следующим образом:
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лозунг: Оставляйте полосу зеленой, чтобы код оставался чистым.
Есть принцип:DRY(Don’t Repeat Yourself)
Поэтому код подвергается рефакторингу и часть повторной генерации объектов помещается в метод setUp().
(При переписывании изменение становится общедоступным, и нет проблем с расширением области доступа при наследовании.)
Сначала выполните тестовый метод:
Добавьте следующий код в класс CalculatorTest:
@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(). Обратите внимание, что здесь для каждого тестового примера будет создан новый объект.
Рефакторинг кода выглядит следующим образом:
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