теория_5 (1035092)

Файл №1035092 теория_5 (Методичка и инструкции на ЛР №8)теория_5 (1035092)2017-12-22СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

12.3. Возможности MVSTE по автоматизации модульного тестирования

Замечание. Подробнее о модульном тестировании можно почитать по адресу http://msdn2.microsoft.com/en-us/library/ms182515(VS.80).aspx

До сих пор мы выполняли часть работы вручную. Но при написании тестов тестировщик также может ошибиться, из-за чего в программе могут остаться различные ошибки. В случае, если программисты ведут разработку по методике экстремального программирования (XP), следуя практике написания тестов перед кодом (test driven development, TDD), количество тестов, которые нужно написать, становится по объему даже большим, чем сам код системы. Однако очевидно, что большую часть работы по разработке тестов отдельных методов (модульное тестирование, unit testing) можно автоматизировать. В MVSTE разработаны специальные средства для автоматизации модульного тестирования. Именно о них и пойдет речь дальше.

12.3.1. Начало работы

К моменту написания тестов мы уже имеем полностью готовый код. Можем приступить к созданию тестов.

12.3.2. Создание тестов

Для создания теста нажимаем правой кнопкой мыши на методе Add() и выбирая пункт меню Create Unit Tests... (рис. 12.1). Появится диалоговое окно, позволяющее создать тесты в другом проекте (рис. 12.2). По умолчанию, создаваемый проект — новый проект на Visual Basic, но также доступны тестовые проекты на C# и C ++. Выбираем Visual C# и нажимаем кнопку OK, перед тем введя имя проекта BaseCalculator.Test.


Рис. 12.1. Пункт контекстного меню " Create Unit Tests ..." в методе Add()


Рис. 12.2. Диалоговое окно "Create Unit tests"

Созданный тестовый проект содержит четыре файла, связанных с тестированием.

Имя файла

Примечание

AuthoringTest.txt

Примечания о создании тестов, включающие инструкции по добавлению дополнительных тестов к проекту

CalcClassTest.cs

Включает в себя сгенерированный тест для тестирования метода Add () наряду с методами для тестовой инициализации и очистки

ManualTest1.mht

Шаблон, который заполняется инструкциями при ручном тестировании

UnitTest1.cs

Пустая структура unit test класса, куда помещаются дополнительные тесты

Так как ручное тестирование мы уже провели, и файл для тестов у нас уже есть, то мы удалим ManualTest1.mht и UnitTest1.cs.

В раздел References при генерации тестового проекта добавляется ссылки на Microsoft.VisualStudio.QualityTools.UnitTestFramework и проект BaseCalculator, который и будет тестироваться. Первое – сборка, которую использует "движок" модульного тестирования при выполнении тестов. Второе — это ссылка на ту сборку, которую мы тестируем.

По умолчанию, сгенерированный тест-метод – это шаблон со следующей реализацией:

/// <summary>

///A test for Add (long, long)

///</summary>

[DeploymentItem("BaseCalculator.exe")]

[TestMethod()]

public void AddTest()

{

long a = 0; // TODO: Initialize to an appropriate value

long b = 0; // TODO: Initialize to an appropriate value

int expected = 0;

int actual;

actual = BaseCalculator.Test.

BaseCalculator_CalcClassAccessor.Add(a, b);

Assert.AreEqual(expected, actual,

"BaseCalculator.CalcClass.Add did not return

the expected value.");

Assert.Inconclusive("Verify the correctness of this test method.");

}

Замечание. Сгенерированный код теста будет сильно зависеть от типа и сигнатуры того метода, который планируется тестировать. Например, мастер сгенерирует код, основанный на технологии reflection ("отражение"), для тестирования private функций. В нашем конкретном случае это не потребовалось, так как метод Add() объявлен как public().

Прежде всего, отметим, что сгенерированный код помечен атрибутом TestMethod типа TestMethodAttribute, а сам класс помечен атрибутом TestClassAttribute, которые объявлены в Microsoft.VisualStudio.QualityTools.UnitTesting.Framework. При помощи технологии Reflection движок модульного тестирования находит все тестовые классы в проекте, помеченные соответствующим атрибутом, а внутри все необходимые для тестирования методы.

Замечание. Об атрибутах можно почитать подробнее по адресу http://msdn2.microsoft.com/en-us/library/system.attribute(VS.80).aspx

В начале теста объявляется значение всех необходимых переменных, а также ожидаемое выходное значение. Затем происходит вызов нужного метода, которому передаются необходимые параметры. В нашем случае это

actual = BaseCalculator.Test.BaseCalculator_CalcClassAccessor.Add(a, b);

Затем идет вызов двух методов класса Assert. Прежде всего рассмотрим второй метод.

Assert.Inconclusive("Verify the correctness of this test method.");

Наличие этого метода в тесте говорит о том, что реализация теста еще не закончена. Сделаем реализацию нашего метода:

/// <summary>

///A test for Add (long, long)

///</summary>

[DeploymentItem("BaseCalculator.exe")]

[TestMethod()]

public void AddTest()

{

long a = 150;

long b = 350;

int expected = 500;

int actual;

actual = BaseCalculator.

Test.BaseCalculator_CalcClassAccessor.Add(a, b);

Assert.AreEqual(expected, actual,

"BaseCalculator.CalcClass.

Add did not return the expected value.");

}

12.3.3. Создание тестов

Чтобы запустить все тесты в рамках проекта, необходимо просто запустить тестовый проект. Один из возможных способов сделать это — кликнуть правой кнопкой мыши на проекте BaseCalculator.Test в Solution explorer и выбрать Set as StartUp Project. Затем используем пункты меню Debug->Start (F5) или Debug->Start Without Debugging (Ctrl+F5), чтобы начать запуск тестов.

В окне Test Results будет показан список со всеми тестами проекта. В момент начала выполнения теста в нашем проекте содержалось два теста: один полностью реализованный тест AddTest, второй – неоконченный AddTest1. В момент запуска оба теста будут в состоянии "неоконченный" (Pending), но как только тесты будет выполнены, появятся результаты выполнения Passed и Inconcluiseve, которые мы и ожидали (Рис. 12.3).



Рис. 12.3. Окно Test Results после выполнения всех тестов

Замечание. Рис. 12.3 показывает окно Test Results. На этом скриншоте в дополнение к колонкам по умолчанию изображена колонка Error Message. Колонки могут быть добавлены или удалены правым щелчком мыши по меню на заголовках колонки и выборе пункта меню Add/Remove Columns... .

Чтобы посмотреть дополнительные детали о тесте, мы можем дважды щелкнуть на нем в окне Test Results и открыть окно AddTest[Result] (рис. 12.4). В нем можно узнать информацию о скорости выполнения теста, его результате, возникшей ошибке и прочее.


Рис. 12.4. Окно детального описания теста AddTest [Results]

Кроме того, мы можем кликнуть правой кнопкой мыши на отдельных тестах и выбирать пункт меню Open Test, чтобы переместиться на код теста.

12.3.4. Обработка исключений

На прошлом семинаре мы обнаружили, что метод RunEstimate() класса AnalaizerClass не достаточно хорошо проверяет объекты, с которыми он работает. Если инициализировать список opz значением {2,2,+,+}, то выполнение метода RunEstimate() приводит к генерации исключения. Действительно, реализуем тест:

/// <summary>

///A test for RunEstimate ()

///</summary>

[DeploymentItem("BaseCalculator.exe")]

[TestMethod()]

public void RunEstimateTest()

{

string expected = null;

string actual;

// Подготовка тестового окружения

BaseCalculator.Test.BaseCalculator_CalcClassAccessor._lastError = "";

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.opz =

new System.Collections.ArrayList();

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.opz.Add("2");

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.opz.Add("2");

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.opz.Add("+");

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.opz.Add("+");

actual = BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.RunEstimate();

Assert.AreEqual(expected, actual,

"BaseCalculator.AnalaizerClass.RunEstimate did not return the expected value.");

}

Пример 12.1.

Замечание. Для работы этого теста необходимо создать начальное тестовое окружение, при этом значение _lastError необходимо очистить, так как оно будет "испорчено" тестом AddTest1(). Подробнее о зависимости тестов от порядка выполнения и тестового окружения мы поговорим на девятом семинаре.

Несмотря на то, что явных блоков try-catch не стоит, сгенерированное исключение не приведет к прекращению работы тестов, а будет корректно обработано. В этом можно убедиться, загляну в окно на RunEstimateTest[Result] (рис. 12.5).


Рис. 12.5. Результат работы RunEstimateTest

Предположим теперь, что при неверных входных параметрах метод RunEstimate() действительно должен генерировать исключение, которое будет перехватываться в другом месте. Создадим еще один тест:

/// <summary>

///A test for RunEstimate ()

///</summary>

[DeploymentItem("BaseCalculator.exe")]

[TestMethod()]

[ExpectedException(typeof(ArgumentOutOfRangeException),

"Была обработана неверная синтаксическая конструкция")]

public void RunEstimateTest1()

{

BaseCalculator.Test.BaseCalculator_CalcClassAccessor._lastError = "";

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.opz =

new System.Collections.ArrayList();

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.opz.Add("2");

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.opz.Add("2");

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.opz.Add("+");

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.opz.Add("+");

BaseCalculator.Test.BaseCalculator_AnalaizerClassAccessor.RunEstimate();

}

Пример 12.2.

Отметим, что, опять же, нет блока try-catch с явным тестом на ArgumentOutOfRangeException. Вместо этого тест включает дополнительный атрибут, ExpectedException, который принимает тип параметра, и произвольное сообщение об ошибке, которое будет показано, если исключение не было брошено. Когда тесты выполняются, среда будет явно следить за тем, чтобы исключение ArgumentException было сгенерировано, и если метод не будет генерировать такое исключение, то тест будет провален.

12.4. Раздаточный материал

12.4.1. Программа

Будут выданы исходные файлы модулей для тестирования методом "белого ящика" средствами MVSTE, пример тестового драйвера.

12.5. Задание

Составить тест-план и провести модульное тестирование (средствами MVSTE) своей программы.

Характеристики

Тип файла
Документ
Размер
269 Kb
Тип материала
Высшее учебное заведение

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов лабораторной работы

Методичка и инструкции на ЛР №8
Инструкции
Задание_1
01sem-giveaway
Спецификация на программу Калькулятор.doc
Задание_2
02sem-giveaway
+Ее___ _кв_кЕ _  и_е__№_.doc
-_и__Еа _ _б_п__Еб_а _Е жЕ_____ак_и.doc
BaseCalculator.exe
02sem-soft
BaseCalculatorNew
BaseCalculator
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
Release
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
obj
Debug
Refactor
TempPE
Properties.Resources.Designer.cs.dll
Задание_3
03sem-soft
Dll
CalcClass.dll
Program
TestDriver
TestDriver
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
AnalaizerClass.cs
CalcClass.dll
My.dll
TestDriver.exe
TestDriver.pdb
TestDriver.vshost.exe
obj
Debug
Refactor
TempPE
ResolveAssemblyReference.cache
TestDriver.MainForm.resources
TestDriver.Properties.Resources.resources
TestDriver.csproj.GenerateResource.Cache
TestDriver.exe
TestDriver.pdb
TestDriver.csproj.FileList.txt
Задание_4
04sem-soft
Dll
AnalaizerClass.dll
CalcClass.dll
Program
TestDriver
TestDriver
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
AnalaizerClass.cs
CalcClass.dll
My.dll
TestDriver.exe
TestDriver.pdb
TestDriver.vshost.exe
obj
Debug
Refactor
TempPE
ResolveAssemblyReference.cache
TestDriver.MainForm.resources
TestDriver.Properties.Resources.resources
TestDriver.csproj.GenerateResource.Cache
TestDriver.exe
TestDriver.pdb
Задание_5
05sem-soft
BaseCalculator
BaseCalculator
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
Release
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
obj
Debug
Refactor
TempPE
Properties.Resources.Designer.cs.dll
BaseCalculator.BaseCalc.resources
BaseCalculator.Properties.Resources.resources
BaseCalculator.csproj.GenerateResource.Cache
BaseCalculator.exe
Задание_6
05sem-soft
BaseCalculator
BaseCalculator
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
Release
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
obj
Debug
Refactor
TempPE
Properties.Resources.Designer.cs.dll
BaseCalculator.BaseCalc.resources
BaseCalculator.Properties.Resources.resources
BaseCalculator.csproj.GenerateResource.Cache
BaseCalculator.exe
Задание_7
09sem-soft
BaseCalculatorNew
BaseCalculator
Properties
AssemblyInfo.cs
Resources.Designer.cs
Resources.resx
Settings.Designer.cs
Settings.settings
bin
Debug
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
Release
BaseCalculator.exe
BaseCalculator.exe.config
BaseCalculator.pdb
BaseCalculator.vshost.exe
BaseCalculator.vshost.exe.config
obj
Debug
Refactor
TempPE
Properties.Resources.Designer.cs.dll
BaseCalculator.BaseCalc.resources
BaseCalculator.Properties.Resources.resources
BaseCalculator.csproj.GenerateResource.Cache
BaseCalculator.exe
Задание_8
10sem-soft
BaseCalculatorNew
BaseCalculator
Properties
AssemblyInfo.cs
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее