Как написать модульный тест?
У меня есть класс Java. Как я могу его модульно протестировать?
В моем случае у меня есть класс, который выполняет двоичную сумму. Он принимает два byte[]
массива, суммирует их и возвращает новый двоичный массив.
Переведено автоматически
Ответ 1
Я предоставляю этот пост как для IntelliJ, так и для Eclipse.
Eclipse:
Чтобы создать модульный тест для вашего проекта, пожалуйста, выполните следующие действия (я использую Eclipse для написания этого теста):
1- Щелкните Создать -> Java Project.
2- Запишите название вашего проекта и нажмите "Готово".
3- Щелкните правой кнопкой мыши на вашем проекте. Затем нажмите Создать -> Класс.
4- Write down your class name and click on finish.
Then, complete the class like this:
public class Math {
int a, b;
Math(int a, int b) {
this.a = a;
this.b = b;
}
public int add() {
return a + b;
}
}
5- Click on File -> New -> JUnit Test Case.
6- Проверьте setUp() и нажмите "Готово". SetUp () будет местом, где вы инициализируете свой тест.
7- Нажмите "ОК".
8- Здесь я просто добавляю 7 и 10. Итак, я ожидаю, что ответом будет 17. Завершите свой тестовый класс следующим образом:
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class MathTest {
Math math;
@Before
public void setUp() throws Exception {
math = new Math(7, 10);
}
@Test
public void testAdd() {
Assert.assertEquals(17, math.add());
}
}
9- Запись щелкните по вашему тестовому классу в проводнике пакетов и нажмите "Выполнить как" -> JUnit Test.
10 - Это результат теста.
IntelliJ: Обратите внимание, что для скриншотов я использовал IntelliJ IDEA community 2020.1. Кроме того, перед выполнением этих шагов вам необходимо настроить jre. Я использую JDK 11.0.4.
1- Щелкните правой кнопкой мыши по основной папке вашего проекта-> создать -> каталог. Вы должны назвать это "тест". 2- Щелкните правой кнопкой мыши по папке с тестом и создайте соответствующий пакет. Я предлагаю создать те же имена пакетов, что и у исходного класса. Затем вы щелкаете правой кнопкой мыши по каталогу тестов -> отмечаете каталог как -> корень тестовых источников. 3- В нужном пакете в каталоге test вам нужно создать класс Java (я предлагаю использовать Test.java). 4- В созданном классе введите '@Test'. Затем среди опций, которые предоставляет IntelliJ, выберите Добавить 'JUnitx' в classpath.
5- Напишите свой тестовый метод в своем тестовом классе. Сигнатура метода выглядит так:
@Test
public void test<name of original method>(){
...
}
Вы можете выполнить свои утверждения, как показано ниже:
Assertions.assertTrue(f.flipEquiv(node1_1, node2_1));
Это импорт, который я добавил:
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
Вы можете проверить свои методы, как показано ниже:
Assertions.assertEquals(<Expected>,<actual>);
Assertions.assertTrue(<actual>);
...
Чтобы запустить модульные тесты, щелкните правой кнопкой мыши на тесте и нажмите "Выполнить" .
Если ваш тест пройдет успешно, результат будет таким, как показано ниже:
Ответ 2
Определите ожидаемый и желаемый результат для обычного случая с корректным вводом.
Теперь реализуйте тест, объявив класс, назовите его как угодно (обычно что-то вроде TestAddingModule) и добавьте к нему метод testAdd (например, как показано ниже) :
- Напишите метод, а над ним добавьте аннотацию @Test .
- В методе запустите двоичную сумму и
assertEquals(expectedVal,calculatedVal)
. Протестируйте свой метод, запустив его (в Eclipse щелкните правой кнопкой мыши и выберите Запустить как → JUnit test).
//for normal addition
@Test
public void testAdd1Plus1()
{
int x = 1 ; int y = 1;
assertEquals(2, myClass.add(x,y));
}
Добавляйте другие варианты по желанию.
- Проверьте, что ваша двоичная сумма не выдает неожиданного исключения при переполнении целого числа.
Проверьте, что ваш метод корректно обрабатывает входные данные Null (пример ниже).
//if you are using 0 as default for null, make sure your class works in that case.
@Test
public void testAdd1Plus1()
{
int y = 1;
assertEquals(0, myClass.add(null,y));
}
Ответ 3
Это очень общий вопрос, и на него можно ответить множеством способов.
Если вы хотите использовать JUnit для создания тестов, вам нужно создать свой класс testcase, затем создать отдельные методы тестирования, которые тестируют конкретную функциональность вашего класса / модуля в рамках тестов (отдельные классы testcase обычно связаны с одним "производственным" классом, который тестируется), и внутри этих методов выполнять различные операции и сравнивать результаты с тем, что было бы правильным. Особенно важно постараться охватить как можно больше угловых примеров.
В вашем конкретном примере вы могли бы, например, протестировать следующее:
- Простое сложение двух положительных чисел. Добавьте их, затем убедитесь, что результат соответствует вашим ожиданиям.
- Сложение между положительным и отрицательным числом (которое возвращает результат со знаком первого аргумента).
- Сложение между положительным и отрицательным числом (которое возвращает результат со знаком второго аргумента).
- Сложение между двумя отрицательными числами.
- Дополнение, которое приводит к переполнению.
Для проверки результатов вы можете использовать различные методы assertXXX из класса org.junit.Assert (для удобства вы можете выполнить 'import static org.junit.Assert.*'). Эти методы проверяют определенное условие и завершают тест неудачно, если оно не подтверждается (необязательно с определенным сообщением).
Пример класса testcase в вашем случае (без определенного содержимого методов):
import static org.junit.Assert.*;
public class AdditionTests {
@Test
public void testSimpleAddition() { ... }
@Test
public void testPositiveNegativeAddition() { ... }
@Test
public void testNegativePositiveAddition() { ... }
@Test
public void testNegativeAddition() { ... }
@Test
public void testOverflow() { ... }
}
Если вы не привыкли писать модульные тесты, а вместо этого тестируете свой код, написав специальные тесты, которые затем проверяете "визуально" (например, вы пишете простой метод main, который принимает аргументы, введенные с клавиатуры, а затем распечатывает результаты - и затем вы продолжаете вводить значения и самостоятельно проверять правильность результатов), то вы можете начать с написания таких тестов в приведенном выше формате и проверки результатов с помощью правильного метода assertXXX вместо того, чтобы делать это вручную. Таким образом, вы можете повторно запустить тест намного проще, чем если бы вам приходилось выполнять ручные тесты.
Ответ 4
Как упоминалось в @CoolBeans, взгляните на JUnit. Вот краткое руководство, которое также поможет вам начать работу с JUnit 4.x
Наконец, если вы действительно хотите узнать больше о тестировании и разработке на основе тестирования (TDD), я рекомендую вам ознакомиться со следующей книгой Кента Бека: Разработка на основе тестирования на примере.