Общие сведения о модульном тестировании

Модульное тестирование — способ тестирования, позволяющий проверить на корректность отдельные модули исходного кода программы. Обычно unit-тесты создаются для каждого метода. Unit-тест представляет собой метод, написанный на языке программирования. Данный метод вызывает тестируемый метод с некоторыми входными параметрами и сравнивает ожидаемое значение с полученным. Если полученное значение соответствует ожидаемому, то данный модульный тест считается пройденным.

Unit-тесты разрабатываются и запускаются с применением набора специальных средств:

а) Библиотека классов для написания unit-тестов;

б) Программное средство для запуска unit-тестов и оценивания результатов их выполнения.

Обычно для модульных тестов в решении создается отдельный проект (сборка, библиотека классов). Потом данная библиотека классов исполняется программным средством для запуска unit-тестов.

Сборка, содержащая модульные тесты, именуется следующим образом: Название_тестируемой_сборки.Tests. В данной сборке определяются классы, тестирующие методы классов тестируемой сборки. Метод класса, в котором реализован тест, называется тестовым. Такой класс также называют тестовым. Классы с тестовыми методами именуются так: Название_тестируемого_классаTest. Тестовые методы именуются так: Название_тестируемого_методаTest.

Обычно unit-тест включает три действия (также именуемые AAA):

1) Arange - задать исходное состояние объектов

2) Act - выполнить действия (взаимодействия)

3) Assert - проверить результат выполненных операций на соответствие ожидаемым значениям

Среда разработки Visual Studio 2015 содержит встроенный инструмент для создания модульный тестов, доступный через главное меню (элемент «Test» или «Тест») (рис. 1).

 

Рис. 1

Для создания проекта с модульными тестами необходимо добавить новый проект «Unit Test Project» (рис. 2).


Рис. 2

 

Пример модульного теста для класса Repository приведен на рисунке 3.

Рис. 3

Для просмотра результата выполнения тестов используется инструмент Test Explorer (рис. 4).


Рис. 4 – Инструмент Test Explorer

Задание

 

Создайте библиотеку классов DomainModel. В ней создайте классы, являющиеся сущностями в рассматриваемой предметной области. Создайте интерфейс репозитория, в котором продекларированы операции CRUD (create (создание), read (чтение), update (обновление), delete (удаление)). Создайте класс, реализующий репозиторий.

Создайте модульный тест для репозитория в отдельной библиотеке классов. Проверьте успешность выполнения теста.

Таблица 1. Задание на модульные тесты для репозитория

Тестовый метод Части теста Описание операции
Получение данных (Get) Arrange Создать объект репозитория.
Act Выбрать данные из репозитория.
Assert Проверить длину выбранной коллекции данных. Проверить тип данных.
Сохранение нового элемента (Add) Arrange Создать объект репозитория.
Act Создать новый объект сущности. Сохранить созданный объект.
Assert Выбрать данные из репозитория. Проверить факт наличия сохраненного объекта.
Обновление существующего элемента (Update) Arrange Создать объект репозитория. Создать новый объект сущности. Сохранить его в репозитории.
Act Выбрать ранее сохраненный объект из репозитория. Изменить его состояние. Обновить объект.
Assert Выбрать обновленный объект из репоизитория. Проверить, что объект сохранился с измененным состоянием.
Удаление (Delete) Arrange Создать объект репозитория. Создать новый объект сущности. Сохранить его в репозитории.
Act Удалить ранее сохраненный объект из репозитория.
Assert Проверить факт отсутствия удаленного объекта в репозитории.

Пример проектов решения приведен на рисунке 1.

 

Рис. 5 – Именование проектов

Требования:

- не менее двух сущностей (двух классов, реализующих сущности);

- способ хранения данных, реализуемых репозитоием: в xml- файлах, json-файлах или в реляционной или документной базе данных по выбору студента.

- в отчете должны быть приведены UML диаграммы классов и последовательностей. На диаграммах должны быть изображены классы-сущности, репозиторий и класс с модульными тестами.

 

Варианты заданий:

 

Вариант № 0

Журнал заказов и книга клиентов электрика.

Вариант № 1

Электронная сервисная книжка автомобиля.

Вариант № 2

Электронный дневник школьника.

Вариант № 3

Электронная книга отзывов и предложений с ответами.

Вариант № 4

Электронная книга отзывов и предложений с ответами.

Вариант № 5

Книга расходов и доходов.

Вариант № 6

Медицинская карта пациента.

Вариант № 7

Электронный табель учета рабочего времени

Вариант № 8

Журнал заказов питьевой воды с доставкой.

Вариант № 9

Электронный журнал вызова экипажа вневедомственной охраны.

 

Отчет по лабораторной работе должен включать следующие разделы:

1.Задание

2.Решение

a.Диаграмма классов;

b.Диаграмма последовательностей.

3.Заключение

4.Список использованных источников

 

Контрольные вопросы:

1. Покажите поля классов реализованных вами сущностей, которые определяют идентичность сущности?

2. Какие операции Assert доступны для выбранного вами средства проведения модульного тестирования?

3. В модульном тесте (тестовом методе) используются четыре операции Assert. Проверка условия в одной из них оказалось неуспешным. Выполнится ли модульный тест с положительным результатом?

Рекомендуемые источники

 

1. Введение в проблемно-ориентированное проектирование // MSDN URL: https://msdn.microsoft.com/ru-ru/magazine/dd419654.aspx (дата обращения: 09.05.2016).

2. Решения и проекты в Visual Studio // MSDN URL: https://msdn.microsoft.com/ru-ru/library/b142f8e7.aspx (дата обращения: 09.05.2016).

3. Создание моделей для приложения // MSDN URL: https://msdn.microsoft.com/ru-ru/library/dd409436.aspx (дата обращения: 09.05.2016).

4. interface (Справочник по C#) // MSDN URL: https://msdn.microsoft.com/ru-ru/library/87d83y5b.aspx (дата обращения: 09.05.2016).Пошаговое руководство. Создание и запуск модульных тестов для управляемого кода // MSDN URL: https://msdn.microsoft.com/ru-ru/library/87d83y5b.aspx (дата обращения: 09.05.2016).

5. 90+ e-books on popular technologies for free // Syncfusion URL: https://www.syncfusion.com/resources/techportal/ebooks (дата обращения: 09.05.2016). (требуется регистрация)