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

Пошаговое руководство. Создание и запуск модульных тестов для управляемого кода
Подготовка к выполнению пошагового руководства
Создание проекта модульного теста
Создание первого тестового метода
Исправьте код и повторно запустите тесты
Использование модульных тестов для улучшения кода
![]() |
---|
|
![]() |
---|
|
-
Проект Bank. См. раздел Пример проекта для создания модульных тестов.
Подготовка к выполнению пошагового руководства
-
Откройте программу Visual Studio 2012. -
В меню Файл выберите пункт Создать, а затем команду Проект. Откроется диалоговое окно Новый проект. -
В области Установленные шаблоны выберите шаблон Visual C#. -
В списке типов приложения выберите пункт Библиотека классов. -
В поле Имя введите Bank и нажмите кнопку ОК. Примечание
Если имя "Bank" уже существует, выберите другое имя для проекта. Будет создан новый проект Bank. Этот проект отобразится в обозревателе решений, а его файл Class1.cs откроется в редакторе кода. Примечание
Если файл Class1.cs не откроется в редакторе кода, дважды щелкните Class1.cs в обозревателе решений, чтобы открыть этот файл. -
Скопируйте исходный код из раздела Пример проекта для создания модульных тестов. -
Замените исходное содержимое файла Class1.cs кодом из примера Пример проекта для создания модульных тестов. -
Сохраните файл как BankAccount.cs -
В меню Построение выберите Построить решение.
// method under test public void Debit(double amount) { if(amount > m_balance) { throw new ArgumentOutOfRangeException("amount"); } if (amount < 0) { throw new ArgumentOutOfRangeException("amount"); } m_balance += amount; }
Для создания проекта модульного теста
-
В меню Файл последовательно выберите Добавить, а затем Новый проект. -
В диалоговом окне нового проекта разверните Установленные, разверните Visual C#, а затем выберите Тест. -
Из списка шаблонов выберите Проект модульного теста. -
В окне Имя введите BankTest, а затем нажмите ОК. Проект BankTests добавится к решению Bank. -
В проекте BankTests добавьте ссылку на решение Bank. В обозревателе решений выберите Ссылки в проекте BankTests, затем выберите Добавить ссылку... из контекстного меню. -
В диалоговом окне "Диспетчер ссылок" разверните Решение и выберите элемент Bank.
Переименование файла класса
// unit test code using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace BankTests { [TestClass] public class BankAccountTests { [TestMethod] public void TestMethod1() { } } }
Добавление оператора using в тестируемый проект
using BankAccountNS
Требования к тестовому классу
Атрибут [TestClass] является обязательным для платформы модульных тестов Microsoft для управляемого кода для любого класса, содержащего методы модульных тестов, которые необходимо выполнить в обозревателе тестов. Каждый метод теста, который требуется выполнять с помощью обозревателя тестов, должен иметь атрибут [TestMethod].
-
Метод создает исключение [ArgumentOutOfRangeException], если размер кредита превышает баланс. -
Он также создает ArgumentOutOfRangeException, если размер кредита меньше нуля. -
Если проверка пунктов 1.) и 2.) проходит успешно, то метод вычитает размер кредита из баланса счета.
Для создания тестового метода
-
Добавьте инструкцию using BankAccountNS; к файлу BankAccountTests.cs. -
Добавьте следующий метод к классу BankAccountTests: // unit test code [TestMethod] public void Debit_WithValidAmount_UpdatesBalance() { // arrange double beginningBalance = 11.99; double debitAmount = 4.55; double expected = 7.44; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // act account.Debit(debitAmount); // assert double actual = account.Balance; Assert.AreEqual(expected, actual, 0.001, "Account not debited correctly"); }
Требования к тестовому методу
-
Метод должен быть отмечен атрибутом [TestMethod]. -
Метод должен вернуть void. -
Метод не должен содержать параметров.
Для построения и запуска теста
-
В меню Построение выберите Построить решение. При отсутствии ошибок появляется окно UnitTestExplorer с указанием Debit_WithValidAmount_UpdatesBalance в списке Незапущенные тесты. Если обозреватель тестов не появляется после успешного построения, то выберите в меню пункт Тест, далее Windows, а затем Обозреватель тестов. -
Выберите Выполнить все для выполнения тестов. throw new ArgumentOutOfRangeException("amount"); } m_balance += amount; }
Для создания проекта модульного теста
-
В меню Файл последовательно выберите Добавить, а затем Новый проект. -
В диалоговом окне нового проекта разверните Установленные, разверните Visual C#, а затем выберите Тест. -
Из списка шаблонов выберите Проект модульного теста. -
В окне Имя введите BankTest, а затем нажмите ОК. Проект BankTests добавится к решению Bank. -
В проекте BankTests добавьте ссылку на решение Bank. В обозревателе решений выберите Ссылки в проекте BankTests, затем выберите Добавить ссылку... из контекстного меню. -
В диалоговом окне "Диспетчер ссылок" разверните Решение и выберите элемент Bank.
Переименование файла класса
// unit test code using System; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace BankTests { [TestClass] public class BankAccountTests { [TestMethod] public void TestMethod1() { } } }
Добавление оператора using в тестируемый проект
using BankAccountNS
Требования к тестовому классу
Атрибут [TestClass] является обязательным для платформы модульных тестов Microsoft для управляемого кода для любого класса, содержащего методы модульных тестов, которые необходимо выполнить в обозревателе тестов. Каждый метод теста, который требуется выполнять с помощью обозревателя тестов, должен иметь атрибут [TestMethod].
-
Метод создает исключение [ArgumentOutOfRangeException], если размер кредита превышает баланс. -
Он также создает ArgumentOutOfRangeException, если размер кредита меньше нуля. -
Если проверка пунктов 1.) и 2.) проходит успешно, то метод вычитает размер кредита из баланса счета.
Для создания тестового метода
-
Добавьте инструкцию using BankAccountNS; к файлу BankAccountTests.cs. -
Добавьте следующий метод к классу BankAccountTests: // unit test code [TestMethod] public void Debit_WithValidAmount_UpdatesBalance() { // arrange double beginningBalance = 11.99; double debitAmount = 4.55; double expected = 7.44; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // act account.Debit(debitAmount); // assert double actual = account.Balance; Assert.AreEqual(expected, actual, 0.001, "Account not debited correctly"); }
Требования к тестовому методу
-
Метод должен быть отмечен атрибутом [TestMethod]. -
Метод должен вернуть void. -
Метод не должен содержать параметров.
Для построения и запуска теста
-
В меню Построение выберите Построить решение. При отсутствии ошибок появляется окно UnitTestExplorer с указанием Debit_WithValidAmount_UpdatesBalance в списке Незапущенные тесты. Если обозреватель тестов не появляется после успешного построения, то выберите в меню пункт Тест, далее Windows, а затем Обозреватель тестов. -
Выберите Выполнить все для выполнения тестов. Во время выполнения теста в верхней части окна отображается анимированная строка состояния. По завершении тестового запуска строка состояния остается зеленой, если все методы теста были успешно пройдены, или красной при наличии тестов, завершающихся неудачей. -
В описываемом случае тест завершится неудачей. Тестируемый метод будет перемещен в Неудачные тесты. группу. Выберите этот метод в Обозревателе тестов в нижней части окна для просмотра сведений.
Анализ результатов теста
Исправление ошибки
m_balance += amount;
m_balance -= amount;
Повторный запуск теста
Анализ проблем
-
Метод создает исключение ArgumentOutOfRangeException, если размер кредита превышает баланс. -
Он также создает ArgumentOutOfRangeException, если размер кредита меньше нуля.
Создание тестовых методов
//unit test method [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange() { // arrange double beginningBalance = 11.99; double debitAmount = -100.00; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // act account.Debit(debitAmount); // assert is handled by ExpectedException }
Создать новый тестовый метод с именем Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange. Скопировать код метода из Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange в новый метод. Присвоить debitAmount значение, превышающее баланс.
Запуск тестов
Продолжение анализа
throw new ArgumentOutOfRangeException("amount");
Выполнение рефакторинга тестируемого кода
// class under test public const string DebitAmountExceedsBalanceMessage = "Debit amount exceeds balance"; public const string DebitAmountLessThanZeroMessage = "Debit amount less than zero";
// method under test // ... if (amount > m_balance) { throw new ArgumentOutOfRangeException("amount", amount, DebitAmountExceedsBalanceMessage); } if (amount < 0) { throw new ArgumentOutOfRangeException("amount", amount, DebitAmountLessThanZeroMessage); } // ...
Выполнение рефакторинга тестовых методов
Сработает предупреждение, что свойство ActualValue исключения (второй параметр конструктора ArgumentOutOfRangeException ) больше начального баланса. Во время выполнения теста в верхней части окна отображается анимированная строка состояния.По завершении тестового запуска строка состояния остается зеленой, если все методы теста были успешно пройдены, или красной при наличии тестов, завершающихся неудачей. -
В описываемом случае тест завершится неудачей. Тестируемый метод будет перемещен в Неудачные тесты. группу. Выберите этот метод в Обозревателе тестов в нижней части окна для просмотра сведений.