МУ+лаб+раб+6. 6 Тестирование ms visualStudio 1 Задание для лабораторной работы
Скачать 1.07 Mb.
|
6 Тестирование MS VisualStudio 6.1 Задание для лабораторной работы Инструмент разработки программного обеспечения Microsoft Visual Studio 2013 предоставляет множество способов тестирования приложений с целью проверки их функциональности и производительности. Необходимо выполнить тестирование программного продукта, используя один из типов тестов Visual Studio. 6.2 Теоретические сведения и пример выполнения Unit test – блок кода (обычно метод), который вызывает тестируемый блок кода и проверяет его правильность работы. Если результат Unit – теста не совпадает с ожидаемым результатом, тест считается не пройденным. Типы тестирования: Модульное тестирование (Unit testing) – тестирование каждой атомарной функции приложения отдельно, с использованием объектов искусственно смоделированной среды. Интеграционное тестирование – вид тестирования, при котором на соответствие требований проверяется интеграция модулей, их взаимодействие между собой, а также интеграция подсистем в одну общую систему. При этом виде тестирования существует много критических точек, в которых приложение может дать сбой, что делает поиск ошибок сложнее. Системное тестирование – это тестирование программного обеспечения, выполняемое на полной, интегрированной системе, с целью проверки соответствия системы исходным требованиям, как функциональным, так и не функциональным. Модульное тестирование Создадим новый проект – библиотека классов (Class Library), и назовем его MyCalcLib (рисунок 1). Рисунок 1 – Создание проекта Переименуем созданный класс из Class1 в MyCalc (рисунок 2). Рисунок 2 – Переименование класса Далее добавим открытый метод, который будет возвращать int, с названием Sum в качестве параметра он принимает int x и int y, и этом методе возвращаем x + y. Текст кода предоставлен ниже: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyCalcLib { public class MyCalc { public int Sum(int x, int y) { return x + y; } } } Для этого метода нам необходимо создать Unit Test. Правой кнопкой мыши кликаем в обозреватели решений по решению MyCalcLib, выбираем добавить новый проект (рисунок 3). Затем в списке проектов переключаемся на вкладку Test, далее в правой части необходимо указать тип теста: модульный тест, веб-тест или тест пользовательского интерфейса, в данном случае выбираем проект модульного теста (Unit Test Project) и назовем его MyCalcLib.Tests (рисунок 4). Рисунок 3 – Добавление проекта в решение Рисунок 4 – Окно мастера создания нового проекта Переименуем в обозреватели решений UnitTest1 в MyCalcTests (рисунок 5). Рисунок 5 – Переименование в MyCalcTests Unit – тестами являются методы, которые помечены атрибутом [TestMethod], Unit – тесты собираются в классы, которые помечены атрибутом [TestClass]. Текст кода предоставлен ниже: using System; u sing Microsoft.VisualStudio.TestTools.UnitTesting; namespace MyCalcLib.Tests { [TestClass] public class MyCalcTests { [TestMethod] public void TestMethod1() { } } } Чтобы использовать TestClass и TestMethod атрибуты необходимо подключить пространство имен Microsoft.VisualStudio.TestTools.UnitTesting. Для того чтобы мы имели возможность работать с классом MyCalc.cs, который находится в отдельной сборке, необходимо эту сборку подключить, для этого правой кнопкой мыши кликаем в обозреватели решений по папке References в MyCalcLib.Tests, и в контекстном меню выбираем добавить ссылку (рисунок 6). Рисунок 6 – Контекстное меню добавление новой ссылки Выбираем проект MyCalcLib из текущего решения (рисунок 7). Теперь эта сборка подключена. Рисунок 7 – Менеджер ссылок Теперь необходимо написать Unit – тест, который будет проверять правильность работы метода Sum, для этого вначале переименуем имя метода из TestMethod1 в Sum_10and20_30returned (это метод на вход будет принимать два значения 10 и 20, результат, который будет возвращен этим методом будет равен 30), это необходимо для того чтобы четко понимать и отображать что именно мы тестируем. Далее мы делаем три операции arrange (здесь создаются переменные), act (здесь выполняются действия над системой) и assert (проверка, что операции выполнились успешно и Unit – тест завершен правильно), эти три операции формируют шаблон AAA (рисунок 8). Рисунок 8 – Подход AAA Текст кода: using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace MyCalcLib.Tests { [TestClass] public class MyCalcTests { [TestMethod] public void Sum_10and20_30returned() { // arrange int x = 10; int y = 20; int expected = 30; //act MyCalc c = new MyCalc(); int actual = c.Sum(x, y); //assert Assert.AreEqual(expected, actual); } } } x – переменная созданная для отправки в метод тестируемого класса. y – переменная созданная для отправки в метод тестируемого класса. expected – переменная созданная для хранения ответа метода при правильном его функционирование (то что мы ожидаем получить). actual – переменная для хранения фактического ответа тестируемого метода. MyCalc c = new MyCalc(); эта строка создает объект с классом который содержит тестируемый метод. Assert.AreEqual(expected, actual); в этой строке реализовано сравнения фактического ответа тестируемого метода и необходимого ответа. Если в результате выполнения фрагмента кода приведенного выше значения expected и actual будут равны, то в таком случае мы получим результат true и Unit – тест – закончится успешно, если же они не будут равны, то мы получим ошибку. Для запуска теста в обозреватели теста (Test Explorer), для того чтобы вызвать окно обозревателя решений кликаем ТЕСТ окна обозреватель тестов (рисунок 9), кликом по необходимому тесту вызвать контекстное меню и в контекстном меню кликнуть по выполнить выбранные тесты (рисунок 10) или же в верхней панели в закладке тест пройти по вкладке выполнить и в нем выбрать необходимый вариант (рисунок 11). Если тесты отсутствуют в обозреватели решений, необходимо выполнить сборку решения, для этого в верхней панели выбираем СБОРКА (Build) Собрать решение. Рисунок 9 – Включение окна обозревателя тестов Рисунок 10 – Вызов теста из обозревателя теста Рисунок 11 – Выполнение тестов через верхнею панель Данная иконка показывает что наш Unit - тест не запускался (рисунок 12). Рисунок 12 – Невыполненные тесты На рисунке ниже (рисунок 13) показано что для метода Sum есть один Unit – тест, но он ни разу не запускался. Рисунок 13 – Невыполненные тесты для метода Sum Когда тест завершился если он завершился удачно рядом с тестом должна появиться данная иконка и также в нижней части обозревателя теста не должно выводиться не каких ошибок (рисунок 14). Также после успешного завершения теста можно посмотреть время его исполнения (в нашем случае это 5 мс). Рисунок 14 – Результат теста Также можно посмотреть результат покрытия кода для этого верхней панели пройдем Тест/Окна/Результат покрытия кода. В этом окне указывается элементы, которые можно протестировать, протестировано и не протестировано строк в процентной и числовой форме также можно вывести данную информацию в разрезе строк. Для анализа результата покрытия необходимо в обозреватели тестов кликнуть правой кнопкой мыши по необходимому тесту, и в контекстном меню выбрать анализ покрытия кода для выбранных тестов. Результат покрытия кода представлен на рисунке 15. Рисунок 15 – Результат покрытия кода Если мы выполним изменения в методе Sum, и они приведут к тому, что появятся ошибки, то после запуска Unit – теста, мы увидим какая произошла ошибка и в каком методе. Данная иконка свидетельствует о том, что в тесте произошел сбой. После завершения теста в обозреватели решения (рисунок 16) видно, что в тесте произошло сбой, в нижней его части видно, что сбой произошел в Assert.AreEqual из-за несоответствия ожидаемого параметра 30 и фактического 31. Следовательно, этот тест можно считать не пройдённым поскольку не совпал параметры. Время, затраченное на произведение этого теста равно 25 мс. Рисунок 16 - Результат теста с сбоем Текст кода с ошибкой: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MyCalcLib { public class MyCalc { public int Sum(int x, int y) { return x + y + 1; } } } Также существует иной способ создания Unit – теста, если вы не ходите самостоятельно создавать эти проекты и именовать все классы внутри, то можно кликнуть правой кнопкой мыши по необходимому методу (в нашем случае это Sum), и в контекстном меню выбрать пункт Create Uunit Test (рисунок 17). Если в контекстном меню отсутствует этот пункт, то необходимо в верхней панели выбрать СЕРВИС, затем пункт Расширения и обновления, далее выбираем В сети, и задаем в поиске Unit Test Generator, его необходимо установить. Рисунок 17 – Контекстное меню При этом появится дополнительное окошко, в котором можно выбрать Framework для тестирования, в какой проект положить Unit – тест, указать правила именования файла, класса и метода, а также наполнение самого Unit – теста (можно сделать чтобы Unit – тест заканчивался ошибкой, чтобы выдавало исключение или чтобы он был пустой), на рисунке 18 приведено окно Unit Test Generator. Рисунок 18 - Окно Unit Test Generator После этого создастся дополнительный проект с именем MyCalcTests (рисунок 19). В этот проект сразу добавляется сборка на MyCalcLib и MyCalcTests.cs в котором находится фрагмент с кодом Unit – теста. Рисунок 19 – Обозреватель решений и фрагмент кода |