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

Unit Testing

Тестирование можно проводить в разном масштабе.

Пирамида тестирования позволяет визуально представить соотношение количества тестов к сложности их создания.

Модульные тесты простые и самые многочисленные. Обычно модульные тесты пишут разработчики в процессе реализации какой-либо доработки (фичи).

Цель модульного тестирования — проверить корректность работы модулей (функций, классов) в изоляции и выявить дефекты ещё на этапе разработки.

The Testing Pyramid
Пирамида тестирования

Функция для тестирования

Примерим на себя роль разработчика. Напишем функцию сложения двух целых чисел sum.

При разработке будем использовать псевдокод — неформальный, более лёгкий для восприятия код.

sum(a, b) {

    объявить переменную c

    выполнить сложение a + b
    результат сложения записать в переменную c

    вернуть переменную c
}

Псевдокод

public int sum(int a, int b) {

    int c;


    c = a + b;


    return c;
}

Код на языке программирования Java

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

Модульный тест (Unit Test) описывает ожидаемый и фактический результат выполнения функции.

Если ожидаемый и фактический результаты совпали, значит тест прошел успешно PASS, иначе тест провален FAIL.

int expected = 3; //ожидаемый результат

int actual = sum(1, 2); //фактический результат

expected == actual;

PASS

== знак логического равенства

int expected = 2147483648;

int actual = sum(2147483646, 2);

expected != actual;

FAIL

!= знак логического неравенства

На подумать: Целочисленное переполнение

Покрытие кода тестами

Code coverage

Полнота проведённого тестирования измеряется таким показателем, как покрытие кода тестами. Причём 100%-ое покрытие не даёт гарантии отсутствия багов. Оно лишь показывает, какая часть кода фактически выполняется при прогоне теста.

На рисунке строка 9 подсвечена красным, так как не была покрыта тестом. То есть функция sum ни разу не была вызвана с аргументами a и b, сумма которых удовлетворяла бы условию на строке 8.

unit-tests
Отображение информации о покрытии кода тестами в среде разработки IntelliJ IDEA
Задача

Изучите функцию sum и выберите значения аргументов, которые позволят добиться 100%-го покрытия кода.

Переменные a, b и c имеют целочисленный тип данных int, который может вмещать минимальное значение -2147483648 и максимальное значение 2147483647. Если выйти за рамки значений результат будет неожиданным.

Протестируйте функцию sum с различными аргументами:

a =
b =
C = 0
public int sum(int a, int b) {

    if (a + b > 2147483646) {
        out.println("Be careful with big numbers!");
    }

    int c = a + b;

    return c;
}
Какие значения аргументов позволят добиться 100%-го покрытия кода?
a =
b =
Sidebar arrow

ВВЕДЕНИЕ

БАЗОВЫЕ ЗНАНИЯ

УРОВНИ ТЕСТИРОВАНИЯ

UI ТЕСТИРОВАНИЕ

ТЕХНИКИ ТЕСТ ДИЗАЙНА

ТЕСТОВАЯ ДОКУМЕНТАЦИЯ

АУТЕНТИФИКАЦИЯ И АВТОРИЗАЦИЯ

POSTMAN

БАЗЫ ДАННЫХ

ТЕСТИРОВАНИЕ РЕЛИЗА

АНАЛИЗ РАБОТЫ ПРИЛОЖЕНИЯ

ПОДГОТОВКА К СОБЕСЕДОВАНИЮ

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