Введение в Unit (модульное) тестирование

Введение в Unit (модульное) тестирование

Всем привет. Много времени мы предоставили рассмотрению автоматизации интерфейса (UI). Давайте же уделим внимание и рассмотрению юнит и интеграционной автоматизации.

Юнит (модульное) тестирование – это написание дополнительного кода с целью проверки мельчайших блоков функционального кода, чтобы убедиться, что они работают без ошибок.

Код обычно разрабатывается на классы или объекты. Термин “класс”, а термин “объект”, как правило, используются как взаимозаменяемые. Классы состоят из переменных и функций, которые включают конструкторы, методы и свойства, но они могут также включать расширяемые классы.

Для каждого объекта в коде, вы должны иметь модульный тест (Unit test) для этого объекта. Юнит тесты должны гарантировать, что каждая строка из вашего функционального кода работает, как ожидалось.

Тестовое покрытие

Unit Test выполняет строки функционального кода, который нужно проверить. Представьте себе, что у вас есть 100 строк кода и блок юнит тестов проверяют только 50. Таким образом, можно гарантировать, что только 50% кода, работает, как ожидается.

Такие инструменты, как MSTest, MBUnit, NUnit, и другие могут предоставлять отчеты об охвате кода.

Категории модульных тестов

  1. Тестирование изолированного кода
  2. Тесты логики “поведения”
  3. Тестирование API

Более детально рассмотрим каждую в отдельных статьях.

NUnit

В нашем проекте мы будем использовать наиболее часто используемый NUnit. Нам понадобятся знания основных его аннотаций и класса проверок Assert.

Основные аннотации:

  • [TestFixture]
  • [Test]

Синтаксис Assert:

  • Классическая реализация: Assert.AreEqual(…), Assert.IsTrue(…) и т.д.
  • Поверка ограничений: Assert.That(…)

Тестируемое приложение

Давайте рассмотрим тестируемое приложение. Основное его предназначение – проверка кредитной истории заемщиков.

unit-test-2

Приведу листинг классов и интерфейсов приложения.

В классе CreditCardApplication создается всего лишь два свойства – имени и возраста кредитора:

Класс BankingSite содержит конструктор для инициализации объекта интерфейса, а также метод, который определяет, положительная или негативная история у заемщика:

И сам интерфейс ICreditCheckerGateway, содержащий один единственный метод, который мы реализуем в предыдущем классе.

В следующей статье рассмотрим unit-тестирование изолированного кода на примере этого приложения.