Составить набор тестов с тестовыми данными

Предмет: Программирование Раздел: Модульное тестирование на основе JUnit (Java)
Анализ задания
  1. Здесь рассматривается лабораторная работа с использованием JUnit – популярной библиотеки для модульного тестирования в языке Java.
  2. Лабораторная работа включает выполнение тестов (в том числе параметризованных тестов) и работу с аннотациями в JUnit.
  3. Вопросы, заданные внизу страницы, также касаются настроек и структуры модульного тестирования.
Задание разбито на несколько частей:
  1. Составить набор тестов с тестовыми данными.
    • Необходимо обратить внимание на тесты из предыдущей лабораторной работы.
    • Важно, что тесты должны быть сгруппированы по признакам, таким как размер элементов или их набор.
  2. Составить набор параметризованных тестов.
    • Параметризованные тесты позволяют запускать один и тот же тест с различными входными данными.
  3. Документирование результатов выполнения тестов через обработку событий.
    • Это связано с обработкой событий, которую нужно добавить в систему для тестов.
Решение
1. Создание набора тестов с тестовыми данными

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

Пример кода для создания тестов в JUnit:

java
import org.junit.Test;
import static org.junit.Assert.*;

public class DataSetTest {
    @Test
    public void testSmallDataSet() {
        int[] data = {1, 2, 3};
        assertEquals(6, sum(data)); // пример теста для малого набора данных
    }
    @Test
    public void testMediumDataSet() {
        int[] data = {10, 20, 30, 40};
        assertEquals(100, sum(data)); // пример теста для среднего набора данных
    }
    @Test
    public void testLargeDataSet() {
        int[] data = {100, 200, 300, 400, 500};
        assertEquals(1500, sum(data)); // пример теста для большого набора данных
    }
    public int sum(int[] data) {
        int sum = 0;
        for (int i : data) {
            sum += i;
        }
        return sum;
    }
}

2. Параметризованные тесты

Параметризованные тесты позволяют запустить один и тот же тест с разными входными значениями. В JUnit это делается с помощью аннотации `@RunWith` и предоставлением нескольких наборов данных с помощью `@Parameters`.

Пример параметризованного теста:

java
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.*;

@RunWith(Parameterized.class)
public class ParameterizedTest {
    private int input;
    private int expected;

    public ParameterizedTest(int input, int expected) {
        this.input = input;
        this.expected = expected;
    }

    @Parameterized.Parameters
    public static Collection data() {
        return Arrays.asList(new Object[][]{
            {1, 2},
            {2, 4},
            {3, 6},
            {4, 8}
        });
    }
    @Test
    public void testMultiplyByTwo() {
        assertEquals(expected, multiplyByTwo(input));
    }
    public int multiplyByTwo(int number) {
        return number * 2;
    }
}

3. Документирование результатов выполнения тестов через обработку событий

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

Пример простейшего класса обработки событий:

java
import org.junit.runner.notification.RunListener;
import org.junit.runner.Description;
import org.junit.runner.notification.Failure;

public class ScholarshipRunListener extends RunListener {
    @Override
    public void testStarted(Description description) {
        System.out.println("Начато тестирование: " + description.getMethodName());
    }
    @Override
    public void testFinished(Description description) {
        System.out.println("Тест завершен: " + description.getMethodName());
    }
    @Override
    public testFailure(Failure failure) {
        System.out.println("Ошибка при выполнении: " + failure.getDescription().getMethodName());
    }
}

java
import org.junit.runner.JUnitCore;

public class RunTests {
    public static void main(String[] args) {
        JUnitCore runner = new JUnitCore();
        runner.addListener(new ScholarshipRunListener());
        runner.run(DataSetTest.class, ParameterizedTest.class);
    }
}

Ответы на контрольные вопросы:
  1. \(\text{Как настроить инфраструктуру модульного тестирования на основе JUnit?}\) - Настройка JUnit включает добавление библиотеки в проект (через Maven, Gradle или вручную) и создание тестов с использованием аннотации `@Test`.
  2. \(\text{Как тестировать конструкторы классов?}\) - Конструкторы можно тестировать так же, как и методы классов, создавая объекты и проверяя корректность их состояния через утверждения (`assertions`).
  3. \(\text{Следует ли тестировать конструкторы по умолчанию?}\) - Если конструктор ничего не делает (кроме создания объекта), его тестирование может быть опущено, однако в случае более сложной логики в конструкторе, тесты обязательны.
  4. \(\text{Как тестировать методы классов?}\) - Методы классов тестируются за счет создания экземпляра класса в тесте, вызова метода и проверки результезультата через утверждения (`assertEquals`, `assertTrue` и т.д.).
  5. \(\text{Следует ли тестировать методы классов по негативным сценариям?}\) - Да, всегда важно предусмотреть тестирование ошибок, исключений и других негативных сценариям для повышения устойчивости кода.

Для интеграции этого обработчика событий с тестами используйте следующий код:

Не нашли нужного вам решения? Оставьте заявку и наши авторы быстро и качественно помогут вам с решением.
Оставить заявку
Работа вам нужна срочно. Не волнуйтесь, уложимся!

Заполните, пожалуйста, данные для автора:

  • 22423 авторов готовы помочь тебе.
  • 2402 онлайн