КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Нижняя часть файлаНа рисунке ниже показан нижний фрагмент кода, создаваемого в ходе пошаговой процедуры, который включает раздел "Дополнительные атрибуты теста", атрибут 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.
3.1.10 Пошаговое руководство. Создание и запуск модульных тестов Visual Studio 2010 В руководстве приводится пошаговое описание процесса создания, запуска и настройки набора тестов с помощью Microsoft Visual Studio 2010. В руководстве производится создание проекта C#, находящегося в стадии разработки, создание тестов для проверки его кода, запуск тестов и изучение результатов. После этого производится изменение кода проекта и повторный запуск тестов. В этом пошаговом руководстве выполняются следующие задачи. · Подготовка проекта "Bank Account", который будет использоваться в данном руководстве. · Открытие существующего проекта. · Создание модульных тестов для открытых и закрытых методов. · Применение тестов к коду. · Обнаружение и исправление ошибок в тестах. · Обнаружение и исправление ошибок в коде. Обязательные компоненты
3.1.11 Подготовка к выполнению пошагового руководства 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, методы которого будут тестироваться в приведенных ниже процедурах. 3.1.12 Создание модульного теста 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". 3.1.13 Запуск и настройка модульного теста 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 в приложении. 3.1.14 Выполнение модульного теста и исправление кода 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 отображается Пройден. После изменения исходного кода нет необходимости в повторном построении тестового проекта, так как запуск теста приводит к автоматическому построению проекта. Итак, был создан модульный тест и с его помощью выявлена и устранена ошибка в коде. 3.1.15 Создание и выполнение модульного теста для закрытого метода 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 позволяет создавать нагрузочные тесты для выявления затруднений, обусловленных нагрузкой и производительностью, используя модульные тесты.
3.1.16 Запуск автоматических тестов из Microsoft Visual Studio 2010 This topic is about how to use Microsoft Visual Studio 2010 to run automated tests. Предоставлено несколько способов выполнения автоматических тестов как из интегрированной среды разработки (IDE) vsprvs, так и из командной строки. Дополнительные сведения о выполнении тестов из командной строки см. в разделе Запуск автоматических тестов из командной строки. Созданные или измененные тесты автоматически сохраняются перед выполнением в Visual Studio. Также при изменении кода модульного теста без перестройки содержащего его проекта Visual Studio построит проект перед выполнением теста. Тем не менее, если вам необходимо планировать тестирование и выполнять тесты в рамках плана тестирования, можно использовать Microsoft Test Manager. Дополнительные сведения об использовании Microsoft Test Manager см. в разделе «Определение действий тестирования с помощью планов тестирования». icrosoft Test Manager предоставляется в составе продуктов Visual Studio 2010 Ultimate и Visual Studio Test Professional. Гибкость в выполнении тестов Visual Studio предоставляет множество способов выполнения тестов. В каждом конкретном случае следует выбирать наиболее подходящий способ. · Выполнение тестов из файлов исходного кода. Для выполнения тестов из любого тестового файла решения используется клавиатура. В частности, выполнить тесты можно во время редактирования файла, содержащего код для тестирования. Это позволит изменить исходный код и немедленно проверить его без использования окна или меню. · Выполнение тестов из файлов в тестовом проекте. Для выполнения тестов из файла решения, содержащего код для тестирования, используется клавиатура или мышь. Это позволяет изменять тест и затем немедленно выполнять его без использования окна или меню. · Выполнение тестов с помощью окон средств тестирования. Кроме того, тесты выполняются из окон Представление теста, Редактор списка тестов и Результаты теста.
|