Практическое занятие № 16
Тема: «Создание и запуск модульных тестов»
Цель работы: получение практических навыков создания, запуска и настройки набора модульных тестов с помощью платформы модульных тестов Майкрософт для управляемого кода и обозревателя тестов Visual Studio.
Получение практических навыков создания проекта C#, находящегося в стадии разработки, создания тестов для проверки его кода, запуска тестов и изучения результатов.
Краткие теоретические сведения Создайте проект для тестирования
Запустите Visual Studio.
В меню Файл выберите Создать Проект. Откроется диалоговое окно Новый проект .
В разделе Visual C# .NET Core выберите шаблон проекта Консольное приложение (.NET Core) .
Присвойте проекту имя Bank и нажмите кнопку ОК.
Будет создан проект Bank. Он отобразится в обозревателе решений, а его файл Program.cs
откроется в редакторе кода. Примечание
Если файл Program.cs не откроется в редакторе, дважды щелкните Program.cs в обозревателе решений, чтобы открыть его.
Замените содержимое файла Program.cs следующими кодом на C#, который определяет класс BankAccount:
C#
using System;
namespace BankAccountNS
{
///
/// Bank account demo class.
///
public class BankAccount
{
private readonly string m_customerName; private double m_balance;
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 (amount m_balance)
{
throw new ArgumentOutOfRangeException("amount");
}
if (amount 0)
{
throw new ArgumentOutOfRangeException("amount");
}
m_balance += amount; // intentionally incorrect code
}
public void Credit(double amount)
{
if (amount 0)
{
throw new ArgumentOutOfRangeException("amount");
}
m_balance += amount;
}
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);
}
}
}
Переименуйте файл в BankAccount.cs, щелкнув его правой кнопкой мыши и выбрав команду Переименовать в обозревателе решений.
В меню Сборка выберите Собрать решение.
Теперь у вас есть проект с методами, которые можно протестировать. В этой статье тестирование проводится на примере метода Debit. Метод Debit вызывается, когда денежные средства
снимаются со счета.
Создание проекта модульного теста
В меню Файл выберите Добавить Создать проект.
Совет
В обозревателе решений щелкните решение правой кнопкой мыши и выберите пункты
Добавить Создать проект.
В диалоговом окне Новый проект разверните узлы Установленные и Visual C# и выберите
Тест.
В списке шаблонов выберите Тестовый проект MSTest (.NET Core) .
В поле Имя введите BankTests, а затем нажмите кнопку ОК. Проект BankTests добавляется в решение Банк.
В проекте BankTests добавьте ссылку на проект Банк.
В обозревателе решений щелкните Зависимости в проекте BankTests, а затем выберите в контекстном меню Добавить ссылку.
В диалоговом окне Диспетчер ссылок разверните Проекты, выберите Решение и выберите элемент Банк.
Нажмите кнопку ОК. Создание тестового класса
Создание тестового класса, чтобы проверить класс BankAccount. Можно использовать UnitTest1.cs, созданный в шаблоне проекта, но лучше дать файлу и классу более описательные имена.
Переименуйте файл и класс
Чтобы переименовать файл, в обозревателе решений выберите файл UnitTest1.cs в проекте BankTests. В контекстном меню выберите команду Переименовать, а затем переименуйте файл в BankAccountTests.cs.
Чтобы переименовать класс, выберите Да в открывшемся диалоговом окне, предлагающем также переименовать ссылки на элемент кода.
Файл BankAccountTests.cs теперь содержит следующий код: C#
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace BankTests
{
[TestClass]
public class BankAccountTests
{
[TestMethod]
public void TestMethod1()
{
}
}
}
Добавьте оператор using
Можно также добавить оператор using в класс, чтобы тестируемый проект можно было вызывать без использования полных имен. Вверху файла класса добавьте:
C#
using BankAccountNS;
Требования к тестовому классу
Минимальные требования к тестовому классу следующие:
Атрибут [TestClass] является обязательным в любом классе, содержащем методы модульных тестов, которые необходимо выполнить в обозревателе тестов.
Каждый метод теста, предназначенный для запуска в обозревателе тестов, должен иметь атрибут [TestMethod].
Можно иметь другие классы в проекте модульного теста, которые не содержат атрибута [TestClass] , а также иметь другие методы в тестовых классах, у которых атрибут — [TestMethod] . Можно вызывать эти другие классы и методы в методах теста.
Создание первого тестового метода
В этой процедуре мы напишем методы модульного теста для проверки поведения метода Debit класса BankAccount.
Существует по крайней мере три поведения, которые требуется проверить:
Метод создает исключение ArgumentOutOfRangeException , если сумма по дебету превышает баланс.
Метод создает исключение ArgumentOutOfRangeException, если сумма по дебету меньше нуля.
Если значение дебета допустимо, то метод вычитает сумму дебета из баланса счета. Совет
Метод по умолчанию TestMethod1 можно удалять, так как он не используется в этом руководстве.
Создание метода теста
Первый тест проверяет, снимается ли со счета нужная сумма при допустимом размере кредита (со значением меньшим, чем баланс счета, и большим, чем ноль). Добавьте следующий метод в этот класс BankAccountTests :
C#
[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");
}
Метод очень прост: он создает новый объект BankAccount с начальным балансом, а затем снимает допустимое значение. Он использует метод Assert.AreEqual, чтобы проверить, что конечный
баланс соответствует ожидаемому.
Требования к методу теста
Метод теста должен удовлетворять следующим требованиям:
Он декорируется атрибутом [TestMethod].
Он возвращает void.
Он не должен иметь параметров.
Сборка и запуск теста
В меню Построение выберите Построить решение.
Откройте Обозреватель тестов, выбрав Тест Windows Обозреватель тестов в верхней строке меню.
Выберите Запустить все , чтобы выполнить тест.
Во время выполнения теста в верхней части окна Обозреватель тестов отображается
анимированная строка состояния. По завершении тестового запуска строка состояния становится зеленой, если все методы теста успешно пройдены, или красной, если какие-либо из тестов не пройдены.
В данном случае тест пройден не будет.
Выберите этот метод в обозревателе тестов для просмотра сведений в нижней части окна.
Исправление кода и повторный запуск тестов
Результат теста содержит сообщение, описывающее возникшую ошибку. Для метода AreEqual выводится сообщение о том, что ожидалось и что было фактически получено. Ожидалось, что баланс уменьшится, а вместо этого он увеличился на сумму списания.
Модульный тест обнаружил ошибку: сумма списания добавляется на баланс счета, вместо того чтобы вычитаться.
Исправление ошибки
Чтобы исправить эту ошибку, в файле BankAccount.cs замените строку: C#
m_balance += amount;
на:
C#
m_balance -= amount;
Повторный запуск теста
В обозревателе тестов выберите Запустить все, чтобы запустить тест повторно. Красно-зеленая строка становится зеленой, чтобы указать, что тест был пройден.
Оборудование, материалы
Персональный компьютер с установленной ОС. Текстовый редактор. MS Visual Studio.
Порядок выполнения задания
Изучить краткие теоретические сведения.
Выполнить приведённые в тексте задания.
Источники
https://docs.microsoft.com/ru-ru/visualstudio/test/walkthrough-creating-and-running-unit-tests-for- managed-code?view=vs-2017