Модульное тестирование 1 ASP.NET MVC 4.0 2013. Что такое unit-тестирование? Unit-тестирование – проверка корректности небольших независимых кусочков кода.

Презентация:



Advertisements
Похожие презентации
Microsoft TechDays Прукс Александр
Advertisements

САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 4 Трансформация логической модели в программный код Лекции читает кандидат технических.
ОБЪЕКТНО- ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП) 1.
b5_java_s4
Лекция 7. Структура языка С/С++. Операторы ветвления: условный оператор if. Полное ветвление. Неполное ветвление. Оператор множественного выбора switch.
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
Информационные технологии Выбор вариантов 2 1.Выполнение последовательности операторов. 2.Выполнение определенной последовательности операторов.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Решение заданий В7 степени и корни по материалам открытого банка задач ЕГЭ по математике 2013 года МБОУ СОШ 5 – «Школа здоровья и развития» г. Радужный.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Лекция 1 MVC (Model-View-Controller) - это конструкционный шаблон, который описывает способ построения структуры приложения, сферы ответственности и взаимодействие.
Институт системного программирования РАН Автоматическая генерация базовых тестов для программных интерфейсов библиотек на основе заголовочных файлов Владимир.
Дизайн и Верстка Системы Организации Видео Архива (СОВА) МИЭМ, Пашинцев Иван, С-55.
Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием.
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
SoapUI Содержание лекции Зачем нужен SoapUI? Основные возможности Тестовый проект – Students Использование SoapUI для анализа WSDL Создание заглушек.
1 Программирование на языке Паскаль Ветвления. 2 Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения:
Подпрограммы 1.Принцип модульности 2.Область действия переменных 3.Параметры подпрограмм 4.Модули.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Транксрипт:

Модульное тестирование 1 ASP.NET MVC

Что такое unit-тестирование? Unit-тестирование – проверка корректности небольших независимых кусочков кода. Цель unit-тестирования – показать, что каждый модуль приложения работает корректно. 2 Продукционный код МетодТест Под результатом тестирования понимается: Возвращаемое значение Значение выходных параметров Изменения в окружении Вызов других методов

Зачем это нужно 3 © GlobalLogic 2008 Затраты на написание тестов по разным оценкам составляют от 15% до 100% затрат времени на написание кода продукта. Модульное тестирование делает стоимость исправления ошибки независимой от времени обнаружения ошибки. t $ Без UT

Чек-лист тестирования метода Проверить работу при нормальных значениях параметров. Проверить работу при граничных значениях параметров. Проверить работу при недопустимых значениях параметров. Убедиться, что выполняются все инструкции Проверить все ветви каждого узла Проверить использование всех объектов, от которых есть зависимость Проверить обработку всех структур данных Проверить обработку всех файлов Проверить нормальное завершение всех циклов Проверить досрочное завершение всех циклов Проверить нормальное завершение всех рекурсий Проверить досрочное завершение всех рекурсий Проверить выбрасывание всех исключений Проверить обработку всех исключений Проверить синхронизацию и расчет времени Проверить аппаратные зависимости. 4

Структура теста 5 Подготовка Выполнение Проверка

Инструменты и библиотеки NUnit MSTest XUnit MbUnit 6 Список всех фреймворков можно найти по

Принципы тестирования F.I.R.S.T. Fast Independent Repeatable Self-Validating Timely 7

Требования к тестам Говорящее название Максимум 10 строк Никакой логики – нет циклов – нет условных операторов – нет многопоточности 8

Атрибуты [TestClass] и [ TestMethod] TestClassAttribute Используется для идентификации тестовых классов TestMethodAttribute Используется для идентификации тестовых методов 9

Assert, CollectionAssert, StringAssert 10 StringAssert Assert CollectionAssert AreEqual() AreNotEqual() AreSame() AreNotSame() Fail() Inconclusive() GetHashCodeTest() IsTrue() IsFalse() IsInstanceOfType() IsNotInstanceOfType() IsNull() IsNotNull() AllItemsAreInstanceOfType() AllItemsAreNotNull() AllItemsAreUnique() AreEqual() AreNotEqual() AreEquivalent() AreNotEquivalent() Contains() DoesNotContain() IsSubsetOf() IsNotSubsetOf() Contains() Matches() DoesNotMatch() StartsWith() EndsWith() Примеры: AreEqual() = Equal AreSame() = ReferenceEqual AreEquivalent() – порядок элементов не играет роли Matches() – отвечает регулярному выражению

Исключения при тестировании 11 Тест считается провалившимся, если он выдает исключение. Если не выполняется утверждение Assert, выбрасывается AssertFailedException Если тест еще не реализован, выбрасывается AssertFailedException (методом Assert.Inconclusive() )

Атрибут [ExpectedException] 12 Атрибут применяется, кода надо протестировать выброс исключения

Инициализация и зачистка 13 Важно, чтобы прохождение очередного теста оставило систему в том же состоянии, что она была до прохождения. Для зачистки и для инициализации применяют методы с атрибутами: [ClassInitialize] – выполняется перед вызовом первого тестового метода; [ClassCleanup] – выполняется после завершения последнего тестового метода; [TestInitialize] – выполняется перед вызовом каждого тестового метода; [TestCleanup] – выполняется после завершения каждого тестового метода. [ClassInitialize] public static void MyClassInitialize(TestContext testContext) { }

Параметр TestContext Имя запущенного юнит-теста Имя лог-файла Путь к каталогу развертывания Для модульного теста, управляемого данными – соединение с БД Для модульных тестов ASP.NET – доступ к объекту Page 14

Создание модульного теста 15

Шаблон теста 16

Результаты тестирования 17

Преимущества Unit-тестирования Поощрение изменений – Легкость обнаружения ошибок – Облегчение рефакторинга Документирование кода – Тесты могут служить иллюстрацией использования класса Тесты улучшают дизайн кода Тесты способствуют повышению квалификации разработчиков 18

Пример Пользователь получает форму с приглашением ввести простое число. Он вводит число. Если число простое, то отправляется на страницу с надписью: Ok Если число составное, остается на прежней форме. 19

Модель 20 public interface IPrime { bool IsPrime(int n); } public class Prime: IPrime { public bool IsPrime(int n) { throw new NotImplemented... }

Задание 1 1.Написать метод модели IsPrime(). Если метод получает отрицательное число, он должен выбросить ArgumentException(). 2. Протестировать метод IsPrime(). 21

Контроллер 22 public class HomeController : Controller { IPrime model; public HomeController(IPrime model) { this.model = model; } [HttpGet] public ViewResult Index() { return View(); } [HttpPost] public ActionResult Index(int number) { … } public ViewResult Ok() { return View(); }

Метод контроллера 23 // Вызывает метод модели // Передает свой параметр методу модели // Если метод модели возвращает true, Index() возвращает // RedirectToRouteResult с RouteValues["action"] = "Ok" // Если метод модели возвращает false, Index() возвращает // ViewResult с ViewName = "« [HttpPost] public ActionResult Index(int number) { if (model.IsPrime(number)) return RedirectToAction("Ok"); return View(); }

Задание 2 Протестировать метод контроллера Index(int n). Для тестирования использовать «тестовый шпион» 24 class SpyPrimeTrue : IPrime { public int Param; public bool IsPrime(int n) { Param = n; return true; }

Задание 3 25 Написать и протестировать статический метод Insert(char[] array, char c), который вставляет символ с в упорядоченный массив array, при этом последний элемент массива выталкивается. Если символ с больше последнего, то с в массив не попадает. Если массив не упорядочен или пуст, выбрасывается исключение ArgumentException. Пример: {2, 3, 5, 6, 9} + 4 => {2, 3, 4, 5, 6}