Практическое руководство создания модульного теста в Visual Studio 2010

Сущность модульных тестов, которые позволяют разработчикам и тестерам быстро проверять наличие логических ошибок в методах классов проектов Visual Basic.NET и C++. Описание использованных средств модульного тестирования Microsoft Visual Studio 2010.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 06.04.2011
Размер файла 616,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования и науки Украины

Национальный горный университет

Институт электроэнергетики

Факультет информационных технологий

Кафедра ПЗКС

Индивидуальная работа

«Практическое руководство создания модульного теста в Visual Studio 2010.»

Выполнил:

ст. гр ПЗс-06

Карпенко Е.А.

Проверили: Саксонов

Днепропетровск 2010

Практическое руководство. Создание и выполнение модульного теста Visual Studio 2010

Модульные тесты позволяют разработчикам и тестерам быстро проверять наличие логических ошибок в методах классов проектов C#, Visual Basic .NET и C++. В этом разделе описывается использование средств модульного тестирования Microsoft Visual Studio 2010 для автоматического создания схемы модульного теста на основе существующего кода, а также добавление в схему проверок, создание категории тестов, списка тестов, выполнение тестов и чтение результатов покрытия кода.

Пример модульного теста

На следующем рисунке показано диалоговое окно Создать модульные тесты. Оно открывается, если щелкнуть правой кнопкой мыши в файле, содержащем методы, и выбрать пункт Создать модульные тесты. Модульные тесты создаются для всех методов, выбранных в списке Типы диалогового окна. На следующем рисунке показано, что в данном примере модульные тесты создаются для методов Credit и Debit.

После создания модульных тестов создается файл кода и изменения отображаются в обозревателе решений.

На следующем рисунке показаны результаты создания модульных тестов.

1. Для каждого метода, выбранного в диалоговом окне "Создать модульные тесты", создается отдельный тест. В данном примере созданы тесты для методов Credit и Debit.

2. Каждый созданный модульный тест имеет пустые переменные и оператор-заполнитель Assert. Оператор-заполнитель Assert -- это, как правило, оператор Assert.Inconclusive.

3. Чтобы придать тесту содержательности, необходимо инициализировать переменные и заменить заполнитель соответствующим оператором Assert. В данном примере модульный тест Credit оставлен в том виде, в котором он был создан, а для модульного теста Debit инициализированы переменные, и выполнена замена оператора Assert.

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

5. Для каждого класса, подвергаемого тестированию, в проекте теста создается файл модульного теста. В данном примере оба тестируемых метода принадлежат одному классу. Следовательно, создан только один файл модульного теста -- BankAccountTest.cs.

6. После выполнения тестов результаты отображаются в окне Результаты тестов.

Создание модульного теста выполняется в два этапа.

Первый этап заключается в создании файла модульного теста, содержащего версию схемы метода теста для каждого тестируемого метода кода. Каждый созданный метод теста схемы имеет пустые переменные и оператор-заполнитель Assert.

На втором этапе выполняется инициализация переменных и замена оператора-заполнителя Assert необходимым оператором.

Создание схем для модульных тестов

Для создания модульных тестов для некоторых или всех методов, представленных в тестируемом коде, используется диалоговое окно Создать модульные тесты.

Хотя, как правило, методы, помеченные такими атрибутами, как "закрытый", "внутренний, "дружественный", не видны вне класса этих методов, средства Microsoft Visual Studio 2010 позволяют осуществлять к таким методам доступ для модульного тестирования.

Создание схемы для модульного теста

1. Откройте в окне Редактор кода Visual Studio код, который необходимо протестировать.

2. (Только для служб ASP.NET) При тестировании веб-служб ASP.NET убедитесь в том, что проект содержит ASPX-страницу. Если модульный тест создается для веб-службы в проекте, не содержащем ASPX-страницу, при попытке выполнения теста появится сообщение об ошибке.

3. Щелкните правой кнопкой мыши пространство имен, класс или метод, которые следует проверить, и нажмите кнопку Создать модульные тесты.

4. В диалоговом окне Создать модульные тесты установите флажки для всех методов, которые необходимо добавить в файл модульного теста.

5. (Не обязательно) Щелкните Параметры, чтобы изменить параметры, заданные по умолчанию для создаваемого модульного теста. Это параметры Visual Studio, применяемые ко всем модульным тестам.

o Параметры наименования: эти параметры позволяют настроить правила именования файлов тестов, тестовых классов и тестовых методов при создании модульных тестов.

o Помечать все результаты тестов по умолчанию как с неопределенным результатом: установите флажок, чтобы предоставить каждому методу теста в качестве заполнителя Assert оператор Assert.Inconclusive(). Снимите флажок, чтобы удалить заполнитель Asserts.

o Включить примечания для документации: установите этот флажок, чтобы снабдить каждый метод теста примечанием-заполнителем. Удалите флажок, чтобы удалить комментарии-местозаполнители.

o Учитывать атрибут InternalsVisibleTo: установите этот флажок, чтобы методы с атрибутами Friend и Internal обрабатывались как открытые (рекомендовано). Снимите флажок, чтобы выполнить тестирование с использованием закрытого метода доступа..

6. (Не обязательно) Чтобы добавить тесты для методов в сборках, для которых отсутствует исходный код, щелкнитеДобавление сборки.

7. В поле Выходной проект воспользуйтесь одной из следующих процедур.

o Чтобы создать новый тестовый проект, выберите язык для нового проекта и нажмите кнопку ОК. Откроется диалоговое окно Новый тестовый проект. Введите имя нового тестового проекта или примите имя, предложенное по умолчанию, и нажмите кнопку Создать.

o Для добавления методов, выбранных в диалоговом окне Создать модульные тесты, в файлы модульных тестов существующего тестового проекта выберите проект в раскрывающемся списке и нажмите кнопку ОК.

Добавление проверки к модульным тестам

Каждый модульный тест, созданный в файле модульных тестов, имеет пустые переменные и оператор-заполнитель Assert. Такой тест можно выполнять, но из-за отсутствия в нем реальных данных не удастся определить, ведет ли себя метод должным образом. Чтобы тест был полезен, необходимо инициализировать переменные и заменить оператор-заполнитель Assert оператором, соответствующим методу, т. е., как правило, оператором Assert.AreEqual.

Добавление проверки к модульному тесту

1. Открыть файл модульных тестов и найти тест, переменные в котором необходимо инициализировать.

2. Найдите в модульном тесте присвоения переменных.

В только что созданных тестах присвоения переменных помечены операторами TODO, которые напоминают о необходимости изменить присвоение. Например, ниже приведен пример типичного присвоения, которое следует изменить:

string target.owner = null; // TODO: Initialize to an appropriate value

3. Присвойте каждой переменной соответствующее значение. Пример присвоения соответствующих значений см. в описании процедуры "Запуск и изменение модульного теста" в руководстве Пошаговое руководство. Создание и запуск модульных тестов(стр13).

Выполнять модульные тесты можно с помощью серии различных значений, создавая управляемый данными модульный тест. Модульный тест на основе данных -- это модульный тест, который выполняется повторно для каждой строки в источнике данных..

4. Найдите и измените в модульном тесте оператор Assert.

5. (Не обязательно) Добавьте к модульным тестам код настройки и код очистки с помощью методов [TestInitialize()] и [TestCleanup()] пространства имен Microsoft.VisualStudio.TestTools.UnitTesting. При создании модульного теста в файл модульных тестов добавляется раздел "Дополнительные атрибуты тестирования". Разверните этот раздел, чтобы просмотреть закомментированные методы, которые могут использоваться для включения инициализации и очистки.

Для управления автоматическими тестами их можно группировать по категориям тестов. Дополнительные сведения см. в разделе Определение категорий тестов для группировки тестов. (http://msdn.microsoft.com/ru-ru/library/dd286595.aspx)

При группировке предпочтительнее использовать категории тестов, а не списки тестов. Категории тестов позволяют выполнять группы тестов, объединенные на основании присвоенных им категорий, без необходимости ведения списков тестов.

модульное тестирование логический

Создание новой категории тестов

1. Откройте окно Представление теста.

2. Выберите тест.

3. В области свойств щелкните Категории теста, затем щелкните многоточие в самом правом столбце.

4. В окне Категория проверки в поле Добавить новую категорию введите имя новой категории теста.

5. Щелкните Добавить, затем нажмите ОК.

Тесту будет присвоена новая категория, и она станет также доступна и для других тестов в настройках их свойств.

Списки тестов -- это способ объединения модульных тестов в логические группы. Основным преимуществом добавления модульных тестов в список тестов является возможность выполнения тестов из нескольких файлов модульных тестов, выполнение тестов как части построения и использование списков для контроля выполнения политики возврата.

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

Создание списка тестов

1. В меню Тест выберите команду Создать список тестов.

2. В диалоговом окне Создание списка тестов введите имя списка, добавьте описание, выберите место расположения списка и нажмите кнопку ОК.

3. Для просмотра доступных тестов в окне Редактор списка тестов щелкните Все загруженные тесты.

4. Перетащите тест, чтобы добавить его из главного окна в список тестов.

Выполнение модульного теста

После создания модульные тесты можно выполнить в любое время. Один из способов выполнения модульных тестов описан ниже, дополнительные сведения об альтернативных способах, таких как сочетания клавиш и команды командной строки, см. в разделе Практическое руководство. Запуск автоматических тестов из Microsoft Visual Studio.

1. В меню Тест выберите Окна, а затем команду Представление теста.

2. (Не обязательно) Для сбора сведений о покрытии кода выполните следующие действия.

1. в меню Тест наведите указатель мыши на команду Изменить настройки тестирования и выберите конфигурацию для запуска;

2. в диалоговом окне Параметры тестирования щелкните Данные и диагностика;

3. в поле Роль выберите нужную для запуска тестов роль;

4. отметьте флажок Покрытие кода и щелкните Настроить;

5. Установите флажки для элементов, по которым следует собрать данные о покрытии кода.

6. в диалоговом окне Подробности покрытия кода нажмите кнопку ОК;

7. в диалоговом окне Параметры тестирования щелкните Применить и щелкните Закрыть.

3. Выберите один или несколько тестов в окне Представление теста. Для выбора нескольких тестов удерживайте нажатой клавишу CTRL.

4. На панели инструментов окна Представление теста щелкните значок Выполнить выбранное. Будет выполнен тест, и откроется окно Результаты теста.

5. (Не обязательно) Для просмотра сведений о тесте щелкните тест правой кнопкой мыши в окне Результаты теста, затем щелкните "Просмотр сведений о результатах теста".

6. (Не обязательно) Чтобы определить область файла модульного теста, содержащую ошибку, в диалоговом окне Трассировка стека ошибок щелкните ссылку на ошибку.

Дополнительные сведения о толковании результатов тестов см. в разделе Просмотр результатов теста. (http://msdn.microsoft.com/ru-ru/library/ms182493.aspx)

Если вы настроили сбор сведений о покрытии кода, можно открыть окно Покрытие кода, чтобы узнать, какой процент методов кода покрывается модульными тестами.

Просмотр покрытия кода модульными тестами

1. На панели инструментов окна Результаты тестов щелкните Показать результаты покрытия кода. Может потребоваться увеличить окно, чтобы кнопка стала видна.

2. Откроется окно Результаты покрытия кода.

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

Составляющие модульного теста Visual Studio 2010

Во время создания модульного теста для каждого класса, подвергаемого тестированию, создается отдельный файл модульного теста. Каждый файл модульного теста содержит метод теста для каждого метода, подвергаемого тестированию. В данном примере оба тестируемых метода принадлежат одному классу. Следовательно, создан только один файл тестового класса -- BankAccountTest.cs.

Верхняя часть файла

На рисунке ниже показаны первые несколько строк кода, включая ссылку на пространства имен, TestClassAttribute и класс TestContext. См. примеры кода в пошаговом руководстве.

1. Microsoft.VisualStudio.TestTools.UnitTesting: во время создания модульного теста ссылка на пространство имен Microsoft.VisualStudio.TestTools.UnitTesting добавляется к тестовому проекту, и пространство имен включается в использующую его инструкцию в верхней части файла модульного теста. Пространство имен содержит много классов для модульных тестов, включая:

o Классы Assert, которые можно использовать, чтобы проверить условия в модульных тестах

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

o Атрибут ExpectedException для проверки того, что определенный тип исключения возникает во время исполнения модульного теста

o Класс TestContext, который хранит данные для модульных тестов, например, подключение данных для тестов, управляемых данными, и сведения, необходимо для выполнения модульных тестов для веб-служб ASP.NET

2. TestClassAttribute: во время создания модульного теста TestClassAttribute включается в тестовый файл, чтобы показать, что данный конкретный класс может включать методы, помеченные атрибутом [TestMethod()]. Без атрибута TestClassAttribute методы теста пропускаются.

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

3. TestContext: во время создания модульных тестов переменная testContextInstance включается для каждого тестового класса. В свойствах класса TestContext хранятся сведения о текущем тесте.

Нижняя часть файла

На рисунке ниже показан нижний фрагмент кода, создаваемого в ходе пошаговой процедуры, который включает раздел "Дополнительные атрибуты теста", атрибут TestMethod и логику метода, включающего инструкцию Assert.

1. Дополнительные атрибуты теста: разверните этот раздел, чтобы просмотреть закомментированные методы, которые могут использоваться для включения инициализации и очистки с помощью указанных ниже атрибутов.

1. [ClassInitialize()] Используйте ClassInitialize для выполнения кода до выполнения первого теста в классе.

2. [ClassCleanUp()] Используйте ClassCleanup для выполнения кода после завершения выполнения всех тестов в классе.

3. [TestInitialize()] Используйте TestInitialize для выполнения кода до выполнения каждого теста.

4. [TestCleanUp()] Используйте TestCleanUp для выполнения кода после завершения выполнения каждого теста.

Создайте методы, помеченные атрибутом [ClassInitialize()] или [TestInitialize()], для подготовки аспектов среды, предназначенной для выполнения теста. Целью является установка известного состояния для выполнения модульного теста. Например, метод [ClassInitialize()] или [TestInitialize()] можно использовать для копирования, изменения или создания определенных файлов данных, используемых тестом.

Создайте методы, помеченные атрибутом [ClassCleanup()] или [TestCleanUp()], для возврата среды в известное состояние после завершения выполнения теста. Это может означать удаление файлов из папок или возврат базы данных в известное состояние. Примером является возврат складской базы данных в исходное состояние после тестирования метода, используемого в приложении ввода заказа.

Рекомендуется включать код очистки в метод [TestCleanup()] или [ClassCleanup()], но не в метод завершения. Исключения, возникающие в методе завершения, не перехватываются и могут привести к непредсказуемым результатам.

2. TestMethodAttribute: во время создания модульного теста каждый метод модульного теста помечается атрибутом [TestMethod()]. Без этого атрибута модульный тест не будет выполняться.

3. Логика метода теста, включая оператор Assert: Каждый создаваемый модульный тест содержит пустые переменные и оператор-заполнитель Assert. Оператор-заполнитель Assert по умолчанию -- это, как правило, оператор Assert.Inconclusive. Чтобы придать тесту содержательности, необходимо инициализировать переменные и заменить заполнитель соответствующим оператором Assert.

В данном примере мы оставили метод модульного теста CreditTest в его первоначальном состоянии после создания, включая инструкции TODO. Однако мы инициализировали переменные и заменили оператор Assert в методе теста DebitTest. Инструкции TODO являются напоминанием, что может понадобиться инициализировать данные строки кода.

Содержимое методов теста может отличаться, в зависимости от типа модульного теста и характеристик тестируемого метода.

Примечание. Правила именования переменных. Средства тестирования Visual Studio при создании модульных тестов используют правила именования переменных. Например, имя файла модульного теста получается путем соединения слова "Test" с именем файла, содержащего тестируемый код; в нашем примере это "BankAccountTest.cs". Имена тестовых классов и методов также формируются с использованием значений по умолчанию. Эти значения можно изменить в диалоговом окне Параметры создания тестов. Чтобы открыть это окно, щелкните Параметры в диалоговом окне Создание модульных тестов.

На рисунке ниже показан обозреватель решений после создания модульного теста для нашего примера проекта.

1. Элементы решения: элементы решения включают два файла:

o Local.testsettings: эти параметры определяют, как выполняются локальные тесты, в ходе которых не собираются диагностические данные.

o Bank.vsmdi: данный файл включает сведения о списках тестов, имеющихся в решении, и заполняет данными окно редактора списка тестов.

o TraceAndTestImpact.testsettings: эти параметры определяют, как выполняются локальные тесты, в ходе которых собирается определенный набор диагностических данных.

2. Тестовый проект: содержит остальные файлы, необходимые для модульных тестов.

3. Свойства тестового проекта: содержит файл AssemblyInfo.cs, в котором содержатся параметры построения проекта.

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

5. Файл модульного теста: это файл модульного теста, описываемого в первом разделе данной статьи. Для каждого класса, подвергаемого тестированию, в тестовом проекте создается файл модульного теста. В данном примере оба тестируемых метода принадлежат одному классу. Следовательно, создан только один файл тестового класса -- BankAccountTest.cs.

Пошаговое руководство. Создание и запуск модульных тестов Visual Studio 2010

В руководстве приводится пошаговое описание процесса создания, запуска и настройки набора тестов с помощью Microsoft Visual Studio 2010. В руководстве производится создание проекта C#, находящегося в стадии разработки, создание тестов для проверки его кода, запуск тестов и изучение результатов. После этого производится изменение кода проекта и повторный запуск тестов.

В этом пошаговом руководстве выполняются следующие задачи.

· Подготовка проекта "Bank Account", который будет использоваться в данном руководстве.

· Открытие существующего проекта.

· Создание модульных тестов для открытых и закрытых методов.

· Применение тестов к коду.

· Обнаружение и исправление ошибок в тестах.

· Обнаружение и исправление ошибок в коде.

Обязательные компоненты

Подготовка к выполнению пошагового руководства

1. Откройте Visual Studio 2010 Premium.

2. В меню Файл выберите пункт Создать, а затем команду Проект.

Отобразится диалоговое окно Новый проект.

3. В области Установленные шаблоны выберите шаблон Visual C#.

4. В списке типов приложения выберите пункт Библиотека классов.

5. В поле Имя введите Bank и нажмите кнопку ОК.

Если имя "Bank" уже существует, выберите для проекта другое имя.

6. Будет создан новый проект Bank. Этот проект отобразится в обозревателе решений, а его файл Class1.cs откроется в редакторе кода.

Если файл Class1.cs не откроется в редакторе кода, дважды щелкните Class1.cs в обозревателе решений, чтобы открыть этот файл.

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

8. Замените исходное содержимое файла Class1.cs кодом из примера Пример проекта для создания модульных тестов.

9. В меню Построение выберите Построить решение.

Будет создан проект с именем "Bank". Он содержит исходный код, подлежащий тестированию, и средства для его тестирования. Пространство имен проекта "Bank", BankAccountNS, содержит открытый класс BankAccount, методы которого будут тестироваться в приведенных ниже процедурах.

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

1. Если файл Class1.cs не откроется в редакторе кода, дважды щелкните Class1.cs в обозревателе решений в проекте Bank.

2. В классе BankAccount, расположенном в файле Class1.cs, перейдите к методу Debit().

3. Щелкните правой кнопкой мыши метод Debit() и выберите команду Создать модульные тесты.

Откроется диалоговое окно Создать модульные тесты.

В области Текущий выбор отображается древовидная структура, отражающая иерархию классов и членов сборки, в которую включен класс BankAccount. С помощью данной страницы можно создавать модульные тесты для любых выбранных членов, а также выбирать тестовый проект, в который будут помещаться созданные модульные тесты.

В древовидной структуре выделен только метод Debit(). Оставьте это выделение и также выделите метод Credit().

4. В области Выходной проект выберите Создать новый тестовый проект Visual C#.

5. Щелкните Параметры.

Откроется диалоговое окно Параметры создания тестов. В области Параметры наименования можно изменить способ именования тестовых файлов, классов и методов при их создании. В области Общие можно изменить другие аспекты создания тестов. Оставьте значения данных параметров по умолчанию и нажмите кнопку ОК.

6. В диалоговом окне Создать модульные тесты нажмите кнопку ОК.

Откроется диалоговое окно Новый тестовый проект.

7. Оставьте имя по умолчанию и нажмите кнопку Создать.

При этом будет создан проект с именем "TestProject1", отображаемый в обозревателе решений.

В проект TestProject1 добавляется файл BankAccountTest.cs, содержащий тестовый класс. В класс включается свойство TestContext и методы для тестирования методов Debit() и Credit().

Каждому методу тестирования автоматически присваивается атрибут TestMethod(). Каждый тест соответствует отдельному методу в тестируемом коде, подлежащему проверке. Методы теста включены в тестовый класс, которому присвоен атрибут TestClass().

8. В файле BankAccountTest.cs укажите значения переменных, подлежащих тестированию. Перейдите к методу DebitTest, в котором имеются строки // TODO, указывающие переменные, которые необходимо задать.

9. Чтобы узнать, какое из значений нужно использовать для метода DebitTest, откройте файл Class1.cs и перейдите к методу Main. Обратите внимание, что переменная имени клиента инициализируется значением Mr. Bryan Walton, переменная сальдо счета -- значением 11,99, метод Credit вызывается с параметром 5,77, а метод Debit вызывается с параметром 11,22. Таким образом, при инициализации переменной Balance значением 11,99 вызов метода Debit с параметром 11,22 должен привести к изменению значения переменной Balance на 0,77.

Это предполагаемое значение переменной Balance (0,77) будет использовано далее в этом пошаговом руководстве.

10. В файле BankAccountTest.cs перейдите к методу DebitTest.

11. Установите следующие значения:

12. BankAccount target = new BankAccount("Mr. Bryan Walton", 11.99);

13. double amount = 11.22;

14. В методе CreditTest добавьте "Mr. Bryan Walton", 11,99) в новый класс BankAccount.

15. Сохраните файл BankAccountTest.cs.

Был создан файл исходного кода, содержащий тесты для проекта "Bank". Теперь все готово к выполнению тестов в классе BankAccountTest в применению к коду проекта "Bank".

Запуск и настройка модульного теста

1. В меню Тест выберите пункт Окна и Представление теста.

Откроется окно представления теста.

2. Щелкните правой кнопкой мыши элемент DebitTest и выберите команду Выполнить выбранное.

Откроется окно Результаты теста, если оно не было открыто ранее. Запустится тест DebitTest.

В ходе выполнения теста в столбце Результат окна Результаты проверки для состояния теста отображается значениеВыполняется. По завершении тестового запуска результат теста меняется на С неопределенным результатом.

3. В окне Результаты проверки щелкните правой кнопкой мыши строку, соответствующую тесту, и выберите команду Просмотреть подробные результаты теста.

4. На странице Подробные результаты теста отображается сообщение об ошибке "Сбой Assert.Inconclusive. Невозможно проверить метод, не возвращающий значение." Для создания успешно выполняемого теста необходимо найти и проверить оператор Assert.

5. Чтобы найти метод теста, содержащий оператор Assert, откройте файл BankAccountTest.cs и перейдите к методу DebitTest().

6. Оператор Assert находится в последней строке метода DebitTest. Он имеет следующий вид.

7. Assert.Inconclusive("A method that does not return a value cannot be verified.");

Преобразуйте этот оператор Assert в комментарий.

8. Теперь при запуске теста результат будет Пройден, однако только потому, что при тестировании сравнение производится с Nothing. Необходимо добавить код для тестирования путем сравнения с ожидаемыми результатами. Добавьте следующий оператор в конец метода DebitTest.

9. Assert.AreEqual((System.Convert.ToDouble(0.77)), target.Balance, 0.05);

Этот оператор сравнивает ожидаемый результат (0,77) с фактическим результатом, возвращаемым при вызове метода Balance класса BankAccount. Если значения не равны, оператор Assert возвращает False, что приводит к неудачной проверке.

В этом операторе Assert содержится третий параметр, delta со значением 0,05. Параметр delta является обязательным для этой перегруженной версии метода Assert.AreEqual; он компенсирует погрешность округления, характерную для типов с плавающей запятой, например Doubles.

Итак, был выполнен созданный метод DebitTest тестового класса BankAccountTest, был сделан вывод о необходимости внесения в него изменений, и соответствующие изменения были произведены. Теперь метод можно использовать для проверки правильности выполнения метода Debit в приложении.

Выполнение модульного теста и исправление кода

1. Повторно запустите тест Debit. В файле BankAccountTest.cs щелкните правой кнопкой мыши метод DebitTest() и выберите команду Выполнить тесты.

В ходе выполнения теста в столбце Результат окна "Результаты теста" состояние теста отображается как Выполняется. По завершении тестового запуска результат теста меняется на Не удалось.

2. В окне Результаты проверки щелкните правой кнопкой мыши строку, соответствующую тесту, и выберите команду Просмотреть подробные результаты теста.

Это приводит к открытию страницы "Сведения о результатах", на которой отображается сообщение об ошибке "Сбой Assert.AreEqual. Ожидалось различие, не большее чем <0,05> между ожидаемым значением <0,77> и фактическим значением <23,21>". Эти числа указывают на ошибку при выполнении математической операции. Так как метод DebitTest тестового класса BankAccountTest проверяет метод Debit класса BankAccount, следует начать с проверки метода Debit.

3. Откройте файл Class1.cs и перейдите к методу Debit.

4. Обратите внимание на следующий оператор присваивания:

5. m_balance += amount;

Этот оператор добавляет к переменной Balance значение переменной Amount, хотя в методе Debit он должен производить вычитание. Измените эту строку следующим образом:

m_balance -= amount;

6. Повторно запустите тест Debit.

В столбце Результат в окне "Результаты теста" для теста DebitTest отображается Пройден.

После изменения исходного кода нет необходимости в повторном построении тестового проекта, так как запуск теста приводит к автоматическому построению проекта.

Итак, был создан модульный тест и с его помощью выявлена и устранена ошибка в коде.

Создание и выполнение модульного теста для закрытого метода

1. Откройте файл Class1.cs в проекте Bank.

2. Щелкните правой кнопкой мыши метод FreezeAccount() и выберите команду Создать модульные тесты.

Откроется диалоговое окно Создать модульные тесты.

В отображаемой древовидной структуре выделен только метод FreezeAccount().

3. (Необязательно.) Щелкните Фильтр и снимите флажок Отображать не общедоступные элементы. Обратите внимание, что метод FreezeAccount() удален из списка дочерних методов класса BankAccount. Повторно щелкните Фильтр и установите флажок Отображать не общедоступные элементы, чтобы повторно отобразить метод FreezeAccount().

4. Убедитесь, что выбран метод FreezeAccount(), и нажмите кнопку ОК.

Это приведет к созданию нового файла закрытого метода доступа с именем Bank.accessor. Он содержит специальные методы доступа, которые используются тестом для косвенного вызова закрытых методов в классе BankAccount. Новый файл появится в обозревателе решений в папке Test References.

5. Откройте файл BankAccountTest.cs и перейдите к методу FreezeAccountTest().

6. Измените код метода FreezeAccountTest(), чтобы он выглядел следующим образом. Измененные и новые фрагменты выделены.

7. public void FreezeAccountTest()

8. {

9. BankAccount_Accessor target = new BankAccount_Accessor("Mr. Bryan Walton", 11.99); // TODO: Initialize to an appropriate value

10. target.FreezeAccount();

11. // Assert.Inconclusive("A method that does not return a value cannot be verified.");

12. bool creditAccount = false; // False means account could be credited: Fail test.

13. // Try to credit account

14. try

15. {

16. target.Credit(1.00);

17. }

18. catch (System.Exception)

19. {

20. // Threw exception. FreezeAccount worked correctly: Pass test.

21. creditAccount = true;

22. }

23.

24. // Assert fails if 'creditAccount' condition is false. Fail test.

25. Assert.IsTrue(creditAccount, "Was able to credit account.");

26. }

27. Запустите тест FreezeAccountTest.

В столбце Результат в окне "Результаты теста" окончательное состояние теста отображается как Пройден. Этот результат является ожидаемым, поскольку тест вызвал метод Credit() после того, как счет был заморожен вызовом метода FreezeAccount().

Итак, был добавлен закрытый метод, создан новый модульный тест для этого метода и произведен запуск теста. Тест можно запускать повторно, используя другие граничные значения для переменной balance, например 15,00.

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

Запуск тестов может производиться из командной строки вместо использования Visual Studio. Дополнительные сведения см. в разделе Пошаговое руководство. Использование программы командной строки для тестирования.

Visual Studio 2010 Ultimate позволяет создавать нагрузочные тесты для выявления затруднений, обусловленных нагрузкой и производительностью, используя модульные тесты.

Практическое руководство. Запуск автоматических тестов из Microsoft Visual Studio Visual Studio 2010

This topic is about how to use Microsoft Visual Studio 2010 to run automated tests. Предоставлено несколько способов выполнения автоматических тестов как из интегрированной среды разработки (IDE) vsprvs, так и из командной строки. Дополнительные сведения о выполнении тестов из командной строки см. в разделе Запуск автоматических тестов из командной строки(http://msdn.microsoft.com/ru-ru/library/ms182486.aspx).

Созданные или измененные тесты автоматически сохраняются перед выполнением в Visual Studio. Также при изменении кода модульного теста без перестройки содержащего его проекта Visual Studio построит проект перед выполнением теста.

Тем не менее, если вам необходимо планировать тестирование и выполнять тесты в рамках плана тестирования, можно использовать Microsoft Test Manager. Дополнительные сведения об использовании Microsoft Test Manager см. в разделе Определение действий тестирования с помощью планов тестирования(http://msdn.microsoft.com/ru-ru/library/dd286581.aspx).

icrosoft Test Manager предоставляется в составе продуктов Visual Studio 2010 Ultimate и Visual Studio Test Professional.

Гибкость в выполнении тестов

Visual Studio предоставляет множество способов выполнения тестов. В каждом конкретном случае следует выбирать наиболее подходящий способ.

· Выполнение тестов из файлов исходного кода. Для выполнения тестов из любого тестового файла решения используется клавиатура. В частности, выполнить тесты можно во время редактирования файла, содержащего код для тестирования. Это позволит изменить исходный код и немедленно проверить его без использования окна или меню.

· Выполнение тестов из файлов в тестовом проекте. Для выполнения тестов из файла решения, содержащего код для тестирования, используется клавиатура или мышь. Это позволяет изменять тест и затем немедленно выполнять его без использования окна или меню.

· Выполнение тестов с помощью окон средств тестирования. Кроме того, тесты выполняются из окон Представление теста, Редактор списка тестов и Результаты теста.

Выполнение тестов из файлов исходного кода решения с использованием клавиатуры

1. В Visual Studio в любом месте решения откройте файл с исходным кодом.

2. Для выполнения тестов из этого файла используются следующие сочетания клавиш.

Сочетание клавиш

Описание

Нажмите сочетание клавиш CTRL + R, затем A

Выполнение всех тестов во всех тестовых проектах.

Нажмите сочетание клавиш CTRL + R, затем D

Выполнение всех тестов из последнего выполнения.

Нажмите сочетание клавиш CTRL + R, затем F

Выполнение всех невыполненных тестов из последнего выполнения.

Примечание

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

Выполнение тестов из файла тестового кода с использованием клавиатуры

1. В Visual Studio откройте файл исходного кода, содержащий методы теста.

2. Выберите область тестирования, разместив курсор в методе, классе или вне области класса.

3. Для выполнения тестов на основе области используются следующие сочетания клавиш.

Сочетание клавиш

Тестовый запуск

Нажмите сочетание клавиш CTRL + R, затем T

Тесты выполняются в текущей области. То есть выполнятся текущий метод теста, все тесты в текущем тестовом классе или все тесты в пространстве имен.

Нажмите сочетание клавиш CTRL + R, затем C

Выполнятся все тесты в текущем тестовом классе.

Нажмите сочетание клавиш CTRL + R, затем N

Выполнятся все тесты в текущем пространстве имен.

Выполнение тестов из файла тестового кода с помощью мыши

1. В Visual Studio откройте файл исходного кода, содержащий методы теста.

2. Щелкните правой кнопкой мыши в методе теста, тестовом классе или вне области тестового класса и в контекстном меню выберите команду Выполнить тесты.

Команда выполнит тесты в текущей области. То есть выполнятся текущий метод теста, все тесты в текущем тестовом классе или все тесты в текущем пространстве имен.

Выполнение тестов с использованием окон средств тестирования и клавиатуры

1. Выберите один или несколько тестов в окне Представление теста.

2. Нажмите сочетание клавиш CTRL+R, затем T (или сочетание клавиш CTRL+R, C или сочетание клавиш CTRL+R, N).

Выполнятся все тесты, выбранные в окне Представление теста.

Для выполнения тестов, выбранных в окне Представление теста, фокус должен быть на окне Представление теста.

либо

3. In the Test List Editor, select one or more tests.

4. Нажмите сочетание клавиш CTRL+R, затем T (или сочетание клавиш CTRL+R, C или сочетание клавиш CTRL+R, N).

This runs all the tests that are selected in the Test List Editor.

Для выполнения тестов, выбранных в окне Редактор списка тестов, фокус должен быть на окне Редактор списка тестов.

5. В окне Результаты теста установите флажки рядом с одним или несколькими тестами или не снимайте флажки после выполнения теста.

6. Нажмите сочетание клавиш CTRL+R, затем T (или сочетание клавиш CTRL+R, C или сочетание клавиш CTRL+R, N).

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

Для выполнения тестов с помощью окон средств тестирования и мыши

· Щелкните правой кнопкой мыши тест в окне представления теста и в контекстном меню выберите команду Выполнить выделенное.

· Выделите тест в окне Представление теста и нажмите кнопку Выполнить выделенное на панели инструментов окна Представление теста.

· In the Test List Editor, select one or more tests. Затем или

o нажмите Выполнить помеченные тесты на панели инструментов окна Редактор списка тестов.

o щелкните правой кнопкой мыши в области окна и выберите Выполнить отмеченные тесты.

· In the test list pane of the Test List Editor, select the check box next to a test list that contains the test or tests that you want to run. Затем нажмите кнопку Выполнить тесты на панели инструментов окна Редактор списка тестов или щелкните в окне правой кнопкой мыши и в контекстном меню выберите команду Выполнить помеченные тесты.

· Нажмите кнопку выполнить окне Результатов теста , с помощью одного или нескольких результатов теста флажок установлен, или нажмите кнопку повторного выполнения исходного тесты в строке состояния Результатов теста окна.

· Для запуска тестов с помощью категорий в окне представления теста выполните следующие действия.

1. Щелкните стрелку левого раскрывающегося списка на панели инструментов окна представления теста.

По умолчанию установлено значение [Все столбцы].

2. Выберите Категории тестов.

3. В текстовом поле фильтрации введите имя категории, по которой необходимо выполнить фильтрацию.

Значение по умолчанию -- <Очистить фильтр>.

4. Нажмите клавишу ВВОД.

В представлении теста отображаются тесты, связанные с указанной категорией.

5. (Необязательно) Для сортировки списка щелкните заголовок столбца Имя теста или Проект.

6. Щелкните тесты в категории, предназначенной для запуска.

7. Для выбора дополнительных тестов щелкните их, удерживая клавишу SHIFT или CTRL.

8. Щелкните значок Выполнить выбранное на панели инструментов.

Выполнение тестового проекта

1. Тестовый проект решения следует сделать автозагружаемым. Для этого в обозревателе решений щелкните правой кнопкой мыши тестовый проект и в контекстном меню выберите команду Назначить автозагружаемым проектом.

В обозревателе решений имя тестового проекта отобразится полужирным шрифтом, означая, что данный проект является автозагружаемым.

2. Запустите проект. Для этого в меню Отладка выберите пункты Запуск отладки или Запуск без отладки или нажмите соответствующие клавиши -- F5 или сочетание клавиш CTRL+F5. Также можно нажать кнопку Запуск отладки (F5) на панели инструментов Стандартная.

Выполнятся все тесты в тестовом проекте.

Параметр Начать отладку запускает тесты, но не осуществляет отладку тестов, не выполняемых на узле по умолчанию (например, модульных тестов ASP.NET).

Пример проекта для создания модульных тестов Visual Studio 2010

Пример "Woodgrove Bank" содержит код, на основании которого можно выполнить построение простой программы. Затем можно создать модульные тесты для тестирования различных методов (как открытых, так и закрытых) программы Woodgrove Bank.

Этот пример кода предназначен для использования в следующих пошаговых руководствах.

· Пошаговое руководство. Создание и запуск модульных тестов(стр13). Пошаговое руководство по созданию и настройке модульных тестов, их выполнению и изучению результатов.

· Пошаговое руководство. Запуск тестов и просмотр покрытия кода(http://msdn.microsoft.com/ru-ru/library/ms182534.aspx). В этом пошаговом руководстве описан порядок просмотра данных о покрытии кода, отображающих тестируемую часть кода проекта.

· Пошаговое руководство. Использование программы командной строки для тестирования(http://msdn.microsoft.com/ru-ru/library/ms182490.aspx). В этом пошаговом руководстве при помощи средства командной строки MSTest.exe выполняются тесты и просматриваются результаты.

Примечание. Единственная умышленно допущенная в этом примере ошибка заключается в том, что у метода Debit в "m_balance += amount" вместо знака плюс перед знаком равно должен стоять минус.

Пример кода

using System;

namespace BankAccountNS

{

/// <summary>

/// Bank Account demo class.

/// </summary>

public class BankAccount

{

private string m_customerName;

private double m_balance;

private bool m_frozen = false;

private BankAccount()

{

}

public BankAccount(string customerName, double balance)

{

m_customerName = customerName;

m_balance = balance;

}

public string CustomerName

{

get { return m_customerName; }

}

public double Balance

{

get { return m_balance; }

}

public void Debit(double amount)

{

if (m_frozen)

{

throw new Exception("Account frozen");

}

if (amount > m_balance)

{

throw new ArgumentOutOfRangeException("amount");

}

if (amount < 0)

{

throw new ArgumentOutOfRangeException("amount");

}

m_balance += amount;

}

public void Credit(double amount)

{

if (m_frozen)

{

throw new Exception("Account frozen");

}

if (amount < 0)

{

throw new ArgumentOutOfRangeException("amount");

}

m_balance += amount;

}

private void FreezeAccount()

{

m_frozen = true;

}

private void UnfreezeAccount()

{

m_frozen = false;

}

public static void Main()

{

BankAccount ba = new BankAccount("Mr. Bryan Walton", 11.99);

ba.Credit(5.77);

ba.Debit(11.22);

Console.WriteLine("Current balance is ${0}", ba.Balance);

}

}

}

/* Используемые в качестве примеров названия предприятий, организаций и товаров, имена доменов, адреса электронной почты, эмблемы, имена людей, названия мест и событий являются вымышленными. Любые совпадения с реальными предприятиями, организациями, товарами, именами доменов, адресами электронной почты, эмблемами, лицами, местами и событиями являются случайными и непреднамеренными. */

Для работы с этим кодом необходимо сначала создать для него проект в Visual Studio. Выполните шаги в разделе "Подготовка к выполнению пошагового руководства" в руководстве Пошаговое руководство. Создание и запуск модульных тестов(стр13).

Литература

http://msdn.microsoft.com/ru-ru/library/dd286656.aspx - Практическое руководство. Создание и выполнение модульного теста

http://msdn.microsoft.com/ru-ru/library/microsoft.visualstudio.testtools.unittesting.aspx - Microsoft.VisualStudio.TestTools.UnitTesting - пространство имен

http://msdn.microsoft.com/ru-ru/library/ms182470.aspx - Практическое руководство. Запуск автоматических тестов из Microsoft Visual Studio

http://msdn.microsoft.com/ru-ru/library/ms182532.aspx - Пошаговое руководство. Создание и запуск модульных тестов

http://msdn.microsoft.com/ru-ru/library/ms182517.aspx - Составляющие модульного теста

http://msdn.microsoft.com/ru-ru/library/ms243176.aspx - Пример проекта для создания модульных тестов

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.