Лабораторная работа 8 (1035390), страница 3
Текст из файла (страница 3)
// Подготовка тестового окружения
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.
Несмотря на то, что явных блоков 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 было сгенерировано, и если метод не будет генерировать такое исключение, то тест будет провален.
Покрытие кода тестами
Чтобы увидеть, какая часть кода проекта фактически тестируется, используйте такой инструмент для тестировщиков в Visual Studio Team System, как Покрытие кода. Этот инструмент показывает процент кода, который был выполнен, и "раскрашивает" его, показывая, какие линии кода были выполнены, а какие нет.
Для начала откроем BaseCalculator. Далее в меню Test выбираем Edit Test Run Configuration. В подменю выбираем Local Test Run (localtestrun.testrunconfig), чтобы запустить файл конфигурации. (аналогично запустить файл конфигурации можно, щелкнув в Solution Explorer под Solution Items на localtestrun.testrunconfig). Появится диалоговое окно localtestrun.testrunconfig (рис. 19.2).
Рис. 19.2. Диалоговое окно "localtestrun.testrunconfig"
Выбираем Code Coverage.
В поле Select artifacts to instrument отмечаем пункты BaseCalculator.exe и BaseCalculator.Test.dll
Нажмите Apply, затем закройте диалоговое окно. Мы настроили файл конфигурации.
Далее в меню Test выберите Select Active Test Run Configuration. Подменю показывает все конфигурации запуска теста вашего решения. Поместим метку на конфигурацию запуска, которую мы только что редактировали, localtestrun.testrunconfig; что сделает её активной конфигурацией запуска теста.
В окне Test View выделяем все тесты и нажимаем кнопку Run Selection.
После выполнения всех тестов в окне Test Results в меню Test выберем Windows и в раскрывшемся подменю нажмем на Code Coverage Results. Откроется окно Code Coverage Results. (рис. 19.3)
Рис. 19.3. Окно "Code Coverage Results"
Раскроем узел для сборки BaseCalculator.exe, для пространства имен BaseCalculator и для класса CalcClass, как показано на рис.19.4.
Рис. 19.4. Окно "Code Coverage Results"
Строки в классе CalcClass представляют его методы. Колонки в окне Code Coverage Results показывают статистику покрытия для отдельных методов, для классов, и для всего пространства имен.
Статистика покрытия кода показывает покрытие блоков и линий кода.
Чтобы посмотреть, какая именно часть кода была покрыта, щелкнем два раза на строку с методом Add.
Откроется файл исходного текста CalcClass.cs на методе Add. В этом файле мы видем "окрашенный" код. Линии, окрашенные в голубой цвет, были выполнены в процессе выполнения тестов, а линии, окрашенные в красный, не были выполнены. (рис.19.5)
Цвета окрашивания линий покрытия кода можно изменить. Для этого нужно зайти в Tools->Options. В открывшемся диалоговом окне нужно выбрать Environment->Fonts and Colors. Далее в раскрывающемся списке Show settings for выбираем Text Editor. Далее в Display items нужно выбрать область покрытия кода, цвет которой вы хотите изменить: это Coverage Not Touched Area, или Coverage Partially Touched Area, или Coverage Touched Area. Для этих областей покрытия кода можно изменить шрифт, его размер, жирность, цвет текста и его "окрашивание". По завершении, чтобы сохранить изменения и выйти из диалогового окна, нажмите OK.
Рис. 19.5. "Окрашивание" покрытия кода
Прокручивая файл, вы можете увидеть в нем покрытие для других методов.
Точно так же можно просмотреть покрытие кода наших модульных тестов, то есть, можно увидеть, какие из тестовых методов были осуществлены (раскрыв в окне Code Coverage Results сборку BaseCalculator.Test.dll). Применяется та же самая схема окрашивания: голубой показывает выполненный в процессе выполнения теста код; красный — невыполненный.
Упорядоченные тесты
Упорядоченный тест содержит в себе другие тесты и предназначается для того, чтобы запускать их в указанном порядке. Упорядоченный тест появляется как отдельный тест в окне Test View, а результаты его выполнения появляются одной строкой в окне Test Results.
Упорядоченный тест может содержать тесты любого типа кроме нагрузочных тестов. Ещё одной особенностью упорядоченного теста является то, что, если мы запустим его удаленно или из командной строки, будет показано предупреждение о том, что, чтобы запустить тест, все ручные тесты, которые содержатся в нем, будут временно из него удалены.
Для начала откроем BaseCalculator, с которым мы работали на 5-ом и 6-ом семинарах. Он уже содержит тесты.
Добавим в тестовый проект упорядоченный тест. Для этого в меню Test выберем New Test. В появившемся диалоговом окне Add New Test выбираем Ordered Test. В поле Test Name введем название теста, например, OrderedTest.orderedtest, а в пункте Add to Test Project выберем наш тестовый проект BaseCalculator.Test. Для добавления теста в проект нажимаем OK. (рис.21.1)
Рис. 21.1. Диалоговое окно Add New Test
В Solution Explorer добавится файл OrderedTest.orderedtest и откроется окно редактирования упорядоченного теста OrderedTest.orderedtest. Мы будем использовать это окно, чтобы выбирать и включать тесты в наш упорядоченный тест (рис. 21.2).
Рис. 21.2. Окно редактирования упорядоченного теста
Рассмотрим подробнее работу с окном редактирования нашего упорядоченного теста OrderedTest.orderedtest.
В ниспадающем меню Select Test List to View можно выбрать список тестов: Lists of Tests, Tests Not in a List, All Loaded Tests или определенный тестовый список. Выберем All Loaded Tests. В Available tests отобразятся все созданные нами ранее тесты.
Чтобы добавить тесты в упорядоченный тест, нужно в Available tests выделить те тесты, которые вы хотите добавить (например, используя SHIFT+click и CTRL+click), и нажать на стрелку вправо . Тесты добавлены в упорядоченный тест.
Замечание. Можно добавлять одни и те же тесты многократно к одному и тому же упорядоченному тесту.
Чтобы удалить тест из упорядоченного теста, нужно в Selected tests выделить те тесты, которые вы хотите удалить (например, используя SHIFT+click и CTRL+click), и нажать на стрелку влево . Тесты удалены из упорядоченного теста.
Чтобы изменить порядок тестов в упорядоченном тесте, нужно в Selected tests выделить те тесты, порядок которых вы хотите изменить (например, используя SHIFT+click и CTRL+click), и нажать на стрелку вверх или вниз . Порядок тестов в упорядоченном тесте будет изменен.
Рис. 21.3. Окно редактирования упорядоченного теста
Замечание. Выставленный флаг Continue after failure указывает на то, что упорядоченный тест продолжит работать независимо от того, закончатся ли один или несколько входящих в его состав тестов неудачей. Если флаг Continue after failure не будет выставлен, то упорядоченный тест прекратит свою работу при первом же возникновении неудачного теста
Упорядоченный тест готов для запуска. Следующий этап – запуск теста тестировщиком.
В окне Test View нажмем правой кнопкой мыши по созданному нами упорядоченному тесту (OrderedTest) и выберем Run Selection (или нажмем в окне Test View на кнопку ).
Откроется окно Test Results, в котором после выполнения упорядоченного теста отобразятся результаты его выполнения Passed или Failed (рис.21.4).
Рис. 21.4. Окно Test Results
Чтобы увидеть результаты выполнения каждого из тестов, входящих в упорядоченный тест, в окне Test Results нужно щелкнуть два раза на строке для упорядоченного теста. Эти результаты появятся в окне OrderedTest [Results]. (рис.21.5)
Рис. 21.5. Окно OrderedTest [Results]
Чтобы увидеть детальные результаты отдельных тестов, нужно щелкнуть два раза на них в окне OrderedTest [Results].
Замечание. Если бы перед запуском теста не был выставлен флаг Continue after failure, то упорядоченный тест прекратил бы свою работу при первом же возникновении неудачного теста. (рис.21.6)
Рис. 21.6. Окна OrderedTest [Results] и Test Result
Замечание. Результаты выполнения тестов можно экспортировать в отдельный файл. Для этого в окне Test Result надо выбрать Export Test Run Results и указать имя и местоположение файла.
Задание
-
Ручное тестирование:
-
Подготовить тестовый вариант 1 (далее ТВ, набор исходных данных и ожидаемых результатов) для функционального тестирования приложения.
-
В среде MS Visual Studio создать новый проект типа Тест.
-
Изменить содержимое файла ручного теста в соответсвии с ТВ-1.
-
Выполнить ручной тест и просмотреть результаты.
-
Создание драйвера тестирования:
-
Подготовить ТВ-2 для структурного тестирования одной из функций приложения.
-
В среде MS Visual Studio создать новый проект типа приложения.
-
Подключить тестируемую функцию, библиотеку или класс.
-
Создать функцию драйвера тестирования (подготовка исходных данных, запуск теста, проверка результатов) в соответсвии с ТВ-2.
-
Запустить тестовую программу и просмотреть результаты.
-
Модульное тестирование:
-
Подготовить ТВ-3 для структурного тестирования одной из функций приложения.
-
В среде MS Visual Studio открыть исходный код тестируемого приложения.
-
Добавить Unit-тест для одной из функций в соответсвии с ТВ-3.
-
Запустить тест и просмотреть результаты.
-
Создать несколько разных тестов для проверки значений и перехвата исключений.
-
Покрытие кода тестами:
-
Установить параметры сбора статистики покрытия кода.
-
Повторить модульные тесты и просмотреть данные о покрытии кода.
-
Упорядоченные тесты:
-
Подготовить ТВ-5 как последовательный набор ТВ для БД (например, очистка таблицы, добавление записи, просмотр и т.д.).
-
Создать упорядоченный тест на основе созданных тестов БД.
-
Выполнить тест и просмотреть результаы.
Контрольные вопросы
-
Что такое тестирование?
-
Что такое верификация?
-
Что такое модульное тестирование?
-
Что такое ручное тестирование?
-
Что такое упорядоченное тестирование?
-
Что такое драйвер тестирования?
-
Как создавать тесты в среде MS Visual Studio?
-
Как запускать тесты в среде MS Visual Studio?
-
Как готовить тестовые варианты?
Литература
-
Орлов С.А., Цилькер Б.Я. Технологии разработки программного обеспечения. - СПб.: Питер. - 2012 г.
-
Материалы сайта http://www.intuit.ru
24