Обозреватель тестов visual studio как открыть
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Сведения о том, как создать, выполнить и настроить серию модульных тестов с помощью платформы модульных тестов Майкрософт для управляемого кода и обозревателя тестов в Visual Studio.
Пошаговое руководство. Создание и запуск модульных тестов для управляемого кода
Создайте проект для тестирования
Запустите Visual Studio.
В меню Файл выберите Создать > Проект.
Откроется диалоговое окно Новый проект .
Присвойте проекту имя Bank и нажмите кнопку ОК.
Будет создан проект Bank. Он отобразится в обозревателе решений, а его файл Program.cs откроется в редакторе кода.
[!NOTE] Если файл Program.cs не откроется в редакторе, дважды щелкните Program.cs в обозревателе решений, чтобы открыть его.
Запустите Visual Studio.
На начальном экране выберите Создать проект.
Назовите проект Bank и щелкните Далее.
Будет создан проект Bank. Он отобразится в обозревателе решений, а его файл Program.cs откроется в редакторе кода.
[!NOTE] Если файл Program.cs не откроется в редакторе, дважды щелкните Program.cs в обозревателе решений, чтобы открыть его.
Переименуйте файл в BankAccount.cs, щелкнув его правой кнопкой мыши и выбрав команду Переименовать в обозревателе решений.
В меню Сборка нажмите Построить решение (или нажмите клавиши CTRL + SHIFT + B).
Теперь у вас есть проект с методами, которые можно протестировать. В этой статье тестирование проводится на примере метода Debit . Метод Debit вызывается, когда денежные средства снимаются со счета.
Создание проекта модульного теста
В меню Файл выберите Добавить > Создать проект.
[!TIP] В обозревателе решений щелкните решение правой кнопкой мыши и выберите пункты Добавить > Создать проект.
В поле Имя введите BankTests , а затем нажмите кнопку ОК.
Проект BankTests добавляется в решение Банк.
[!NOTE] в Visual Studio 2019 версии 16.9 шаблон проекта MSTest имеет формат проекта модульного теста.
Назовите проект BankTests и щелкните Далее.
Проект BankTests добавляется в решение Банк.
В проекте BankTests добавьте ссылку на проект Банк.
В обозревателе решений щелкните Зависимости в проекте BankTests, а затем выберите в контекстном меню элемент Добавить ссылку или Добавить ссылку на проект.
В диалоговом окне Диспетчер ссылок разверните Проекты, выберите Решение и выберите элемент Банк.
Создание тестового класса
Создание тестового класса, чтобы проверить класс BankAccount . Можно использовать UnitTest1.cs, созданный в шаблоне проекта, но лучше дать файлу и классу более описательные имена.
Переименуйте файл и класс
- Чтобы переименовать файл, в обозревателе решений выберите файл UnitTest1.cs в проекте BankTests. В контекстном меню выберите команду Переименовать (или нажмите клавишу F2), а затем переименуйте файл в BankAccountTests.cs.
- Чтобы переименовать класс, выберите Да в открывшемся диалоговом окне, предлагающем также переименовать ссылки на элемент кода.
- Чтобы переименовать класс, поместите курсор в UnitTest1 в редакторе кода, щелкните правой кнопкой мыши и выберите команду Переименовать (или нажмите клавиши F2). Введите название BankAccountTests и нажмите клавишу ВВОД.
Файл BankAccountTests.cs теперь содержит следующий код:
Добавьте оператор using
Можно также добавить оператор using в класс, чтобы тестируемый проект можно было вызывать без использования полных имен. Вверху файла класса добавьте:
Требования к тестовому классу
Минимальные требования к тестовому классу следующие:
Атрибут [TestClass] является обязательным в любом классе, содержащем методы модульных тестов, которые необходимо выполнить в обозревателе тестов.
Каждый метод теста, предназначенный для запуска в обозревателе тестов, должен иметь атрибут [TestMethod] .
Можно иметь другие классы в проекте модульного теста, которые не содержат атрибута [TestClass] , а также иметь другие методы в тестовых классах, у которых атрибут — [TestMethod] . Можно вызывать эти другие классы и методы в методах теста.
Создание первого тестового метода
В этой процедуре мы напишем методы модульного теста для проверки поведения метода Debit класса BankAccount .
Существует по крайней мере три поведения, которые требуется проверить:
Метод создает исключение xref:System.ArgumentOutOfRangeException , если сумма по дебету превышает баланс.
Метод создает исключение xref:System.ArgumentOutOfRangeException, если сумма по дебету меньше нуля.
Если значение дебета допустимо, то метод вычитает сумму дебета из баланса счета.
[!TIP] Метод по умолчанию TestMethod1 можно удалять, так как он не используется в этом руководстве.
Создание метода теста
Первый тест проверяет, снимается ли со счета нужная сумма при допустимом размере кредита (со значением меньшим, чем баланс счета, и большим, чем ноль). Добавьте следующий метод в этот класс BankAccountTests :
Метод очень прост: он создает новый объект BankAccount с начальным балансом, а затем снимает допустимое значение. Он использует метод xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual%2A?displayProperty=nameWithType, чтобы проверить, что конечный баланс соответствует ожидаемому. Такие методы, как Assert.AreEqual , xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue%2A?displayProperty=nameWithType и другие, зачастую используются в модульном тестировании. Дополнительную концептуальную информацию о написании модульного теста см. в разделе Написание тестов.
Требования к методу теста
Метод теста должен удовлетворять следующим требованиям:
Он декорируется атрибутом [TestMethod] .
Он возвращает void .
Он не должен иметь параметров.
Сборка и запуск теста
В меню Сборка нажмите Построить решение (или нажмите клавиши CTRL + SHIFT + B).
Откройте Обозреватель тестов, выбрав Тест > Windows > Обозреватель тестов в верхней строке меню (или нажмите клавиши CTRL + E, T).
Выберите Запустить все, чтобы выполнить тест (или нажмите клавиши CTRL + R, V).
Во время выполнения теста в верхней части окна Обозреватель тестов отображается анимированная строка состояния. По завершении тестового запуска строка состояния становится зеленой, если все методы теста успешно пройдены, или красной, если какие-либо из тестов не пройдены.
В данном случае тест пройден не будет.
Выберите этот метод в обозревателе тестов для просмотра сведений в нижней части окна.
Исправление кода и повторный запуск тестов
Модульный тест обнаружил ошибку: сумма списания добавляется на баланс счета, вместо того чтобы вычитаться.
Повторный запуск теста
В обозревателе тестов выберите Запустить все, чтобы запустить тест повторно (или нажмите клавиши CTRL + R, V). Красно-зеленая строка становится зеленой, чтобы указать, что тест был пройден.
. moniker range="=vs-2022" . moniker-end
Использование модульных тестов для улучшения кода
В этом разделе рассматривается, как последовательный процесс анализа, разработки модульных тестов и рефакторинга может помочь сделать рабочий код более надежным и эффективным.
Мы создали тестовый метод для подтверждения того, что допустимая сумма правильно вычитается в методе Debit . Теперь проверим, что метод создает исключение xref:System.ArgumentOutOfRangeException, если сумма по дебету:
Создание и запуск новых методов теста
Создадим метод теста для проверки правильного поведения в случае, когда сумма по дебету меньше нуля:
Мы используем метод xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.ThrowsException%2A для подтверждения правильности созданного исключения. Этот метод приводит к тому, что тест не будет пройден, если не возникнет исключения xref:System.ArgumentOutOfRangeException. Если временно изменить тестируемый метод для вызова более общего исключения xref:System.ApplicationException при значении суммы по дебету меньше нуля, то тест работает правильно — то есть завершается неудачно.
Чтобы проверить случай, когда размер списания превышает баланс, выполните следующие действия:
Создать новый метод теста с именем Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange .
Скопировать тело метода из Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange в новый метод.
Присвоить debitAmount значение, превышающее баланс.
Выполните два теста и убедитесь, что они пройдены.
Еще раз проанализировав тестируемый метод BankAccount.Debit , можно заметить, что оба условных оператора используют конструктор ArgumentOutOfRangeException , который просто получает имя аргумента в качестве параметра:
Рефакторинг тестируемого кода
Затем изменим два условных оператора в методе Debit :
Рефакторинг тестовых методов
В этом случае метод Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange может выглядеть следующим образом:
Повторное тестирование, переписывание и анализ
Метод теста сейчас обрабатывает не все требуемые случаи. Если тестируемый метод Debit не смог выдать исключение xref:System.ArgumentOutOfRangeException, когда значение debitAmount было больше остатка (или меньше нуля), метод теста выдает успешное прохождение. Это нехорошо, поскольку метод теста должен был завершиться с ошибкой в том случае, если исключение не создается.
Это является ошибкой в методе теста. Для решения этой проблемы добавим утверждение xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail%2A?displayProperty=nameWithType в конце тестового метода для обработки случая, когда исключение не создается.
Однако повторный запуск теста показывает, что тест теперь оказывается непройденным при перехватывании верного исключения. Блок catch перехватывает исключение, но метод продолжает выполняться, и в нем происходит сбой на новом утверждении xref:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail%2A?displayProperty=nameWithType. Чтобы разрешить эту проблему, добавим оператор return после StringAssert в блоке catch . Повторный запуск теста подтверждает, что проблема устранена. Окончательная версия метода Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange выглядит следующим образом:
Усовершенствования тестового кода привели к созданию более надежных и информативных методов теста. Но что более важно, в результате был также улучшен тестируемый код.
[!TIP] В этом пошаговом руководстве используется платформа модульных тестов Microsoft для управляемого кода. Обозреватель тестов также может запускать тесты c платформ модульных тестов стороннего производителя, которые имеют адаптеры для обозревателя тестов. Дополнительные сведения см. в разделе Установка платформ модульного тестирования сторонних поставщиков.
Сведения о запуске тестов из командной строки см. в разделе Параметры командной строки VSTest.Console.exe.
Используйте Visual Studio, чтобы определить и запустить модульные тесты для обеспечения работоспособности кода, нужного объема протестированного кода, а также для обнаружения ошибок и сбоев, прежде чем с ними столкнутся клиенты. Выполняйте модульные тесты регулярно, чтобы обеспечить правильную работу вашего кода.
Создание модульных тестов.
В этом разделе описывается создание проекта модульного теста.
Откройте проект, который хотите протестировать в Visual Studio.
Выберите узел решения в обозревателе решений. Затем в верхней строке меню выберите Файл > Добавить > Новый проект.
В диалоговом окне нового проекта найдите проект модульного теста, который хотите использовать.
Разверните узел Установлено, выберите язык, который вы хотите использовать для своего тестового проекта, после чего выберите Тест.
Нажмите Далее, выберите имя для тестового проекта и нажмите Создать.
Нажмите Далее, выберите имя для тестового проекта и нажмите Создать.
Выберите имя для тестового проекта, например HelloWorldTests, и нажмите OK.
Проект добавляется в решение.
В проекте модульного тестирования добавьте ссылку на проект, который вы хотите протестировать, щелкнув правой кнопкой мыши Ссылки или Зависимости, после чего выбрав Добавить ссылку или Добавить ссылку на проект.
Выберите проект, содержащий код, который будет тестироваться, и нажмите OK.
Добавьте код в метод модульных тестов.
Запуск модульных тестов
Откройте обозреватель тестов, выбрав Тест > Обозреватель тестов в верхней строке меню (или нажмите клавиши CTRL + E, T).
Откройте Обозреватель тестов, выбрав Тест > Windows > Обозреватель тестов в верхней строке меню.
Запустите модульные тесты, нажав Запустить все (или нажмите клавиши CTRL + R, V).
После завершения зеленый флажок указывает, что тест пройден. Красный значок "x" указывает на сбой теста.
Используйте обозреватель тестов для запуска модульных тестов из встроенной платформы тестирования (MSTest) или сторонней платформы тестирования. Вы можете группировать тесты по категориям, фильтровать список тестов, а также создавать, сохранять и запускать списки воспроизведения тестов. Кроме того, с его помощью можно выполнять отладку тестов и анализировать производительность тестов и покрытие кода.
Просмотр результатов динамического модульного тестирования (Visual Studio Enterprise)
Если вы используете платформу тестирования MSTest, xUnit или NUnit в Visual Studio 2017 или более поздней версии, можно просмотреть динамические результаты модульных тестов.
Включите Live Unit Testing в меню Тест, выбрав Тест > Live Unit Testing > Запустить.
Вы можете просматривать результаты тестов в окне редактора кода по мере написания и редактирования кода.
Щелкните индикатор результатов теста для просмотра дополнительных сведений, таких как имена тестов для этого метода.
Дополнительные сведения о Live Unit Testing см. в разделе Live Unit Testing.
Использование сторонней платформы тестирования
Вы можете запускать модульные тесты в Visual Studio с помощью сторонних тестовых платформ, таких как NUnit, Boost или Google C++ Testing Framework, в зависимости от вашего языка программирования. Чтобы использовать стороннюю платформу тестирования, выполните следующие действия.
Используйте диспетчер пакетов NuGet, чтобы установить пакет NuGet для выбранной платформы.
(C++) В Visual Studio 2017 и более поздних версиях уже включены некоторые платформы, такие как Google C++ Testing Framework. Дополнительные сведения см. в статье Написание модульных тестов для C/C++ в Visual Studio.
Добавление проекта модульного тестирования:
Откройте решение, содержащее код, который нужно протестировать.
В обозревателе решений щелкните решение правой кнопкой мыши и выберите Добавить > Создать проект.
Выберите шаблон проекта модульного теста.
Для того примера — NUnit
Щелкните Далее, назовите проект и нажмите кнопку Создать.
Задайте проекту имя и нажмите ОК, чтобы создать его.
Шаблон проекта содержит ссылки на пакеты NuGet для NUnit и NUnit3TestAdapter.
Добавьте ссылку из проекта тестирования на проект, содержащий код, который вы хотите протестировать.
В обозревателе решений щелкните проект правой кнопкой мыши и выберите Добавить > Ссылка. (Ссылку также можно добавить из контекстного меню узла Ссылки или Зависимости.)
Добавьте код в метод теста.
Запустите тест в обозревателе тестов или щелкните правой кнопкой мыши в коде теста и выберите Запустить тесты (или нажмите клавиши CTRL + R, T).
Создавайте модульные тесты, чтобы обеспечить правильную работу кода с помощью добавочных изменений кода. Существует несколько платформ, которые можно использовать для написания модульных тестов, в том числе разработанные третьими сторонами. Некоторые тестовые среды специализируются на тестировании на различных языках или платформах. Обозреватель тестов предоставляет единый интерфейс модульных тестов для любых таких платформ. Дополнительные сведения об использовании обозревателя тестов см. в разделе Выполнение модульных тестов с помощью обозревателя тестов и Вопросы и ответы по обозревателю тестов.
Создание теста и создание кода
В том же решении добавьте новый тестовый проект MSTest.
Назовите тестовый проект MathTests.
Напишите простой метод теста, который проверяет результат, полученный для конкретных входных данных. Добавьте в класс UnitTest1 приведенный ниже код.
Создайте тип на основе кода теста.
Установите курсор на Rooter , а затем в меню лампочки выберите Создать тип "Rooter" > Создать новый тип.
В диалоговом окне Создать тип установите для параметра Проект значение MyMath, проект библиотеки классов, и нажмите OK.
Создайте метод из кода теста. Установите курсор на SquareRoot , а затем в меню лампочки выберите Создать метод Rooter.SquareRoot.
Выполните модульный тест.
Чтобы открыть Обозреватель тестов, в меню Тест выберите Windows > Обозреватель тестов.
В обозревателе тестов выберите Запустить все, чтобы запустить тест.
Выполняется сборка решения, тест запускается и завершается ошибкой.
Выберите имя теста.
Дополнительные сведения о тесте появятся на панели Сводка теста.
Перейдите по верхней ссылке в разделе Трассировка стека, чтобы перейти к расположению, в котором произошел сбой теста.
На данном этапе создан тест и заглушка, которые будут изменены таким образом, что тест будет успешно пройден.
Проверка изменения кода
В файле Class1.cs улучшите код SquareRoot :
В обозревателе тестов выберите Запустить все.
Выполняется сборка решения, тест запускается и завершается успешно.
Расширение диапазона входных данных
Для уверенности, что код работает во всех случаях, добавьте тесты, которые используют более широкий диапазон входных значений.
Избегайте изменения существующих успешно выполненных тестов. Вместо этого добавьте новые тесты. Изменяйте существующие тесты только в тех случаях, когда меняются пользовательские требования. Такой подход позволяет не потерять существующие функциональные возможности при работе с расширенным кодом.
В тестовом классе добавьте следующий тест, который использует диапазон входных значений:
В обозревателе тестов выберите Запустить все.
Новый тест завершается неудачей (несмотря на то, что первый тест по-прежнему завершается успешно). Чтобы найти точку сбоя, выберите тест, который не пройден, и просмотрите сведения на панели Сводка теста.
Проверьте тестируемый метод, чтобы узнать, что не так. Измените код SquareRoot , как показано:
В обозревателе тестов выберите Запустить все.
Теперь оба теста завершаются успешно.
Добавление тестов для исключительных случаев
Добавьте новый тест для отрицательных входных значений:
В обозревателе тестов выберите Запустить все.
Тестируемый метод зацикливается, его необходимо отменить вручную.
На панели инструментов обозревателя тестов нажмите Отмена.
Выполнение теста останавливается.
Исправьте код SquareRoot , добавив следующую инструкцию if в начало метода:
В обозревателе тестов выберите Запустить все.
Все тесты завершаются успешно.
Рефакторинг тестируемого кода
Выполните рефакторинг кода, но не изменяйте тесты.
Рефакторинг — это изменение, которое делает код более производительным или более понятным. Это действие не предназначено для изменения поведения кода, поэтому тесты не изменяются.
Рекомендуется выполнять рефакторинг отдельно от расширения функциональности. Неизменяемость тестов уменьшает шансы случайных ошибок во время рефакторинга.
Измените строку, которая вычисляет result в методе SquareRoot , следующим образом:
Выберите Выполнить все и убедитесь, что все тесты по-прежнему завершаются успехом.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Узнайте, как обозреватель тестов Visual Studio предоставляет гибкий и эффективный способ запуска модульных тестов и просмотра результатов.
Основные сведения о модульных тестах
Убедитесь, что код работает, как ожидалось, создав и выполнив модульные тесты. Модульное тестирование получило такое название, так как функции программы разбиваются на отдельные тестируемые участки поведения, которые можно протестировать в качестве отдельных модулей. Обозреватель тестов Visual Studio предоставляет гибкий и эффективный способ запуска модульных тестов и просмотра результатов в Visual Studio. Visual Studio устанавливает платформы модульного тестирования Microsoft для управляемого и машинного кода. Платформа модульного тестирования используется для создания модульных тестов, их запуска и создания отчетов о результатах таких тестов. Завершив внесение изменений, запустите модульные тесты повторно, чтобы убедиться, что код по-прежнему работает правильно. Visual Studio Enterprise может выполнять эту задачу автоматически с помощью функции Live Unit Testing, которая определяет тесты, затронутые вносимыми в код изменениями, и выполняет их в фоновом режиме в процессе ввода.
Модульное тестирование максимально влияет на качество кода, когда оно является неотъемлемой частью рабочего процесса разработки ПО. После написания функции или другого блока кода приложения создаются модульные тесты, которые проверяют поведение кода в ответ на стандартные, граничные и некорректные случаи ввода данных; также проверяются любые явные или предполагаемые допущения, сделанные кодом. При разработке, управляемой тестами, модульные тесты создаются перед написанием кода, поэтому модульные тесты используются в качестве технической документации и спецификации функциональности.
Обозреватель тестов также может запускать тесты c платформ модульных тестов стороннего производителя и платформ на основе открытого кода, имеющих дополнительные интерфейсы для Обозревателя тестов. Многие из этих платформ могут быть добавлены при помощи Менеджера расширений Visual Studio и Галереи Visual Studio. Дополнительные сведения см. в разделе Установка платформ модульного тестирования сторонних поставщиков.
Для получения информации по введению в модульное тестирование, которое знакомит вас сразу с созданием кода, см. один из следующих разделов.
Пример решения MyBank
. moniker range="vs-2017" . moniker-end . moniker range="vs-2019" . moniker-end . moniker range=">=vs-2022" . moniker-end
Первая попытка проектирования приложения MyBank включает в себя компонент счетов, который представляет собой лицевой счет и его транзакции с банком, а также компонент базы данных, который включает в себя функции объединения лицевых счетов и управления ими.
Создается решение MyBank , которое содержит два проекта.
Первая попытка создания проекта Accounts содержит класс для хранения базовой информации о счете, интерфейс, который определяет функции счета любого типа, например, для внесения и снятия средств со счета и класс, производный от интерфейса, который представляет собой текущий счет. Проект Счета начинается с создания следующих исходных файлов:
AccountInfo.cs, который определяет основную информацию о счете;
IAccount.cs, определяющего стандартный интерфейс IAccount для счета, включая методы внесения и снятия средств со счета и получения баланса счета;
CheckingAccount.cs, содержащего класс CheckingAccount , который реализует интерфейс IAccount для чекового счета.
Из опыта известно, что при снятии средств с текущего счета необходимо убедиться, что количество снимаемых средств меньше, чем размер баланса счета. Поэтому метод IAccount.Withdraw в CheckingAccount перекрывается методом, который проверяет данное условие. Метод может выглядеть следующим образом.
Теперь, когда есть немного кода, можно провести тестирование.
Создание проекта модульного теста и заглушек модульных тестов
В окне редактора кода выберите в контекстном меню команду Создать модульные тесты.
. moniker range="vs-2017"
[!NOTE] Команда меню Создать модульные тесты доступна только для управляемого кода, предназначенного для платформы .NET Framework (но не .NET Core). . moniker-end . moniker range="vs-2019"
. moniker range=">=vs-2022"
. moniker range="=vs-2022" . moniker-end
Заглушки модульных тестов создаются в новом проекте модульного теста для всех методов в классе.
. moniker range="vs-2017" . moniker-end . moniker range="vs-2019" . moniker-end . moniker range=">=vs-2022" . moniker-end
Теперь рассмотрим процедуру Написания тестов, чтобы сделать ваш модульный тест значимым, а также любого рода дополнительные модульные тесты, которые вы, возможно, захотите добавить с целью тщательного тестирования вашего кода.
Создание проекта и модульных тестов вручную
Проект модульного теста отражает структуру проекта кода. В примере MyBank добавляются два проекта модульного тестирования с именами AccountsTests и BankDbTests в решение MyBanks . Имена проекта теста произвольны, но рекомендуется принять концепцию стандартного именования.
Добавление нового проекта модульного тестирование в решение
- В обозревателе решений щелкните решение правой кнопкой мыши и выберите Добавить >СоздатьПроект.
В диалоговом окне Новый проект разверните узел Установлено, выберите требуемый язык для тестового проекта, а затем Тест.
Чтобы использовать одну из платформ модульного тестирования Microsoft выберите Проект модульного тестирования из списка шаблонов проекта. В иных случаях выберите шаблон проекта платформы модульного тестирования, который необходимо использовать. Для тестирования проекта Accounts в нашем примере проект будет назван AccountsTests .
[!NOTE] Не все платформы модульного тестирования сторонних разработчиков и на основе открытого кода предоставляют шаблоны проекта Visual Studio. Просмотрите информацию в документе платформы по созданию проекта.
Введите test в поле поиска шаблона проекта, чтобы найти шаблон проекта модульного теста для платформы тестирования, которую вы хотите использовать. (В примерах этого раздела мы используем MSTest.)
На следующей странице присвойте проекту имя. Для тестирования проекта Accounts в нашем примере проект можно назвать AccountsTests .
В проекте модульного тестирования добавьте ссылку на проект кода в тесте, а в данном примере — на проект Счета.
Создание ссылки на проект кода
В проекте модульного теста в обозревателе решений щелкните правой кнопкой мыши узел Ссылки или Зависимости, после чего выберите Добавить ссылку на проект или Добавить ссылку, в зависимости от того, что доступно.
В диалоговом окне диспетчера ссылок откройте узел Решение и выберите Проекты. Выберите наименование проекта кода и закройте диалоговое окно.
Каждый проект модульного тестирования содержит классы, которые отражают имена классов в проекте кода. В данном примере проект AccountsTests будет содержать следующие классы.
Класс AccountInfoTests содержит методы модульного тестирования для класса AccountInfo в проекте Accounts .
Класс CheckingAccountTests содержит методы модульного тестирования для класса CheckingAccount .
Платформа модульного тестирования и Visual Studio IntelliSense помогут вам в написании кода модульных тестов для проекта кода. Для запуска в обозревателе тестов многие платформы требуют добавления особых атрибутов для определения методов модульного тестирования. Платформы также предоставляют способ — обычно при помощи оператора контроля или атрибутов метода -— для определения успешности или не успешности теста. Другие атрибуты определяют необязательные методы установки, которые выполняются при инициализации класса и перед каждым методом тестирования, а также методы разборки, которые запускаются после каждого метода тестирования и после уничтожения класса.
Модель AAA (размещение, действие, утверждение) является стандартным способом написания модульных тестов для метода тестирования.
Подраздел Размещение метода модульного тестирования инициализирует объекты и устанавливает значение данных, которые переданы методу для теста.
Подраздел Действие вызывает метод для теста с размещенными параметрами.
Дополнительные сведения о платформах модульного тестирования Microsoft см. в одном из следующих разделов:
Настройка времени ожидания для модульных тестов
Если вы используете платформу MSTest, можно использовать xref:Microsoft.VisualStudio.TestTools.UnitTesting.TimeoutAttribute для установки времени ожидания в отдельном методе теста:
Задние лимита времени на максимально разрешенный
Выполнение тестов в обозревателе тестов
При построении проекта тестирования тесты появляются в обозревателе тестов. Если обозреватель тестов не виден, выберите Тест в меню Visual Studio, Windows, затем обозреватель тестов (или нажмите клавиши CTRL + E, T).
. moniker range="vs-2017" . moniker-end . moniker range="vs-2019" . moniker-end . moniker range=">=vs-2022" . moniker-end
При выполнении, написании и повторном запуске тестов обозреватель тестов может отображать результаты в группах Неудачные тесты, Пройденные тесты, Пропущенные тесты и Незапущенные тесты. Можно выбирать различные группы по параметрам на панели инструментов.
Кроме того, можно фильтровать тесты по совпадению текста в поле поиска на глобальном уровне или с помощью одного из предустановленных фильтров. Можно запустить любую выборку тестов в любое время. Результаты запущенного теста появляются сразу же в строке "успешно/не успешно" наверху окна обозревателя. Детальная информация результата метода тестирования отображается при выборе теста.
Выполнение и просмотр тестов
Панель инструментов обозревателя тестов помогает найти, организовать и запустить необходимые тесты.
. moniker range="vs-2017" . moniker-end . moniker range="vs-2019" . moniker-end . moniker range=">=vs-2022" . moniker-end
Можно выбрать Запустить все, чтобы запустить все тесты (или нажать клавиши CTRL + R, V), или выбрать Запустить, чтобы выбрать подмножество тестов для запуска (или нажать клавиши CTRL + R, T). Выберите тест, чтобы просмотреть детальную информацию по нему на панели сведений. Выберите Открыть текст в контекстном меню (клавиша F12) для отображения исходного кода выбранного теста.
Если отдельные тесты не имеют зависимостей, предотвращающих запуск этих тестов в любом порядке, включите параллельное тестирование с помощью переключателя на панели инструментов. Это может заметно сократить время, необходимое для выполнения всех тестов.
Если отдельные тесты не имеют зависимостей, предотвращающих запуск этих тестов в любом порядке, включите параллельное тестирование в меню параметров на панели инструментов. Это может заметно сократить время, необходимое для выполнения всех тестов.
Запуск тестов после каждой сборки
Кнопка | Описание |
---|---|
Чтобы запускать модульные тесты после каждой локальной сборки, в стандартном меню выберите Тест, а затем выберите Выполнить тесты после сборки в панели инструментов обозревателя тестов. |
[!NOTE] Запуск модульных тестов после каждой сборки требует Visual Studio 2017 Enterprise или Visual Studio 2019. В Visual Studio 2019 эта функция доступна в выпусках Community и Professional, а также в выпуске Enterprise.
Чтобы запустить модульные тесты после каждой локальной сборки, на панели инструментов обозревателя тестов щелкните значок "Параметры" и выберите в меню пункт Выполнить тесты после сборки.
Фильтрация и группировка списка тестов
Если тестов много, можно отфильтровать список по определенной строке. Для этого введите соответствующий текст в поле поиска обозревателя тестов. Можно ограничить фильтр при помощи выбора фильтров из списка.
. moniker range="vs-2017" . moniker-end . moniker range="vs-2019" . moniker-end . moniker range=">=vs-2022" . moniker-end
Кнопка | Описание |
---|---|
Для группировки тестов по категории, нажмите кнопку Группировать по . |
Вопросы и ответы
Вопрос. Как выполнять отладку модульных тестов?
Ответ. Чтобы запустить сеанс отладки для тестов, можно использовать обозреватель тестов. Пошагово выполняя код, отладчик Visual Studio плавно переключается назад и вперед между модульными тестами и проектом для тестирования. Начало отладки
В редакторе Visual Studio установите точку останова в одном или нескольких методах тестирования, которые вы хотите проверить.
[!NOTE] Так как методы тестирования могут запускаться в любом порядке, необходимо устанавливать точки останова во всех методах тестирования, которые необходимо проверить.
В обозревателе тестов выберите методы тестирования и затем Отладить выбранные тесты из меню быстрого запуска.
См. дополнительные сведения об отладке модульных тестов.
Вопрос. Если я использую TDD, как я могу создать код из тестов?
Ответ. Используйте быстрые действия для создания классов и методов в коде проекта. Напишите инструкцию в методе тестирования, которая вызывает класс или метод, который необходимо создать, затем щелкните значок лампочки, отображаемый под ошибкой. Если вызов предназначен для конструктора нового класса, выберите Сформировать тип из меню и следуйте подсказкам мастера, чтобы вставить класс в проект кода. Если вызов предназначен для метода, выберите Сформировать метод из меню IntelliSense.
. moniker range="vs-2017" . moniker-end . moniker range="vs-2019" . moniker-end . moniker range=">=vs-2022" . moniker-end
Вопрос. Можно ли создать модульные тесты, которые принимают несколько наборов данных в качестве входных данных для выполнения теста?
Ответ. Да. Управляемые данными методы тестирования позволяют тестировать диапазон значений с помощью одного метода модульного теста. Примените к методу теста атрибут DataSource , который определяет источник данных и таблицу, в которых содержатся подлежащие тестированию значения переменных. В теле метода назначьте ряд значений для переменных при помощи индексатора TestContext.DataRow[ ColumnName ] .
[!NOTE] Эти процедуры применяются только к методам тестирования, которые пишутся при помощи платформы модульного тестирования Microsoft для управляемого кода. Если используется другая платформа, проконсультируйтесь с документацией по платформе для эквивалентного функционала.
Например, предположим, что был добавлен ненужный метод в класс CheckingAccount , который называется AddIntegerHelper . AddIntegerHelper добавляет два целочисленных значения.
Для создания управляемого данными теста для метода AddIntegerHelper сначала создается база данных доступа с именем AccountsTest.accdb и таблица с именем AddIntegerHelperData . Таблица AddIntegerHelperData определяет колонки для указания первого и второго операнда сложения и колонку, указывающую ожидаемый результат. Заполняем несколько рядов соответствующими значениями.
Метод с атрибутом запускается один раз для каждого ряда в таблице. Обозреватель тестов оповещает о неудачном тесте для метода, если одна из итераций не была успешной. Панель подробных результатов теста для метода показывает статус "прошел/неудачен" для каждого ряда данных.
Вопрос. Можно ли узнать, какой объем кода проверяется модульными тестами?
Ответ. Да. Можно определить объем кода, который был фактически проверен модульными тестами, с помощью средства покрытия кода в Visual Studio Enterprise. Поддерживаются машинные и управляемые языки и все платформы модульного тестирования, которые могут быть запущены платформой модульного тестирования.
Можно запустить покрытие кода на выбранных тестах или на всех тестах решения. Окно результатов объема протестированного кода отображает процент блоков кода продукта, которые были задействованы по строке, функции, классу, пространству имен и модулю.
Чтобы запустить анализ объема протестированного кода для методов теста в решении, выберите Тестирование > Анализ покрытия кода для всех тестов.
Результаты покрытия появляются в окне Результаты объема протестированного кода.
. moniker range="=vs-2022" . moniker-end
Вопрос. Можно ли протестировать методы в коде, которые имеют внешние зависимости?
Ответ. Да. В выпуске Visual Studio Enterprise компонент Microsoft Fakes можно использовать с методами тестов, которые были написаны с помощью платформ модульного тестирования для управляемого кода.
Microsoft Fakes использует два подхода при создании классов-заменителей для внешних зависимостей:
Заглушки создают классы на замену, которые являются производными от родительского интерфейса класса зависимости цели. Методы заглушек могут быть заменены на публичные виртуальные методы класса цели.
Оболочки используют инструментарий среды выполнения для перевода вызовов целевого метода на метод заменяющей оболочки для невиртуальных методов.
При обоих подходах используются созданные делегаты вызовов для метода зависимости для определения требуемого поведения в данном методе тестирования.
В. Можно ли использовать другие платформы модульного тестирования для создания модульных тестов?
О . Да, выполните инструкции по поиску и установке других платформ. Перезапустив Visual Studio, повторно откройте решение, чтобы создать модульные тесты, и выберите установленные платформы здесь:
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
Модульное тестирование в Visual Studio
Создание проекта программы, модули которой будут тестироваться
Разработаем проект содержащий класс, который вычисляет площадь прямоугольника по длине двух его сторон.
Class1 переименуем в Geometry.
В классе реализуем метод, вычисляющий площадь прямоугольника. Для демонстрации остановимся на работе с целыми числами. Код программы приведён ниже.
Площадь прямоугольника, как известно, это произведение двух его сторон.
Создание проекта для модульного тестирования в Visual Studio
Чтобы выполнить unit-тестирование, необходимо в рамках того же самого решения создать ещё один проект соответствующего типа.
Правой кнопкой щёлкните по решению, выберите «Добавить» и затем «Создать проект…».
Перед Вами появится следующий код:
Директива [TestMethod] обозначает, что далее идёт метод, содержащий модульный (unit) тест. А [TestClass] в свою очередь говорит о том, что далее идёт класс, содержащий методы, в которых присутствуют unit-тесты.
В соответствии с принятыми соглашениями переименуем класс UnitTest1 в GeometryTests.
Затем в References проекта необходимо добавить ссылку на проект, код которого будем тестировать. Правой кнопкой щёлкаем на References, а затем выбираем «Добавить ссылку…».
В появившемся окне раскрываем группу «Решение», выбираем «Проекты» и ставим галочку напротив проекта MathTaskClassLibrary. Затем жмём «ОК».
Также в коде необходимо подключить с помощью директивы using следующее пространство имён:
Займёмся написание теста. Проверим правильно ли вычисляет программа площадь прямоугольника со сторонами 3 и 5. Ожидаемый результат (правильное решение) в данном случае это число 15.
Переименуем метод TestMethod1() в RectangleArea_3and5_15returned(). Новое название метода поясняет, что будет проверяться (RectangleArea — площадь прямоугольника) для каких значений (3 и 5) и что ожидается в качестве правильного результата (15 returned).
Тестирующий метод обычно содержит три необходимых компонента:
- исходные данные: входные значения и ожидаемый результат;
- код, вычисляющий значение с помощью тестируемого метода;
- код, сравнивающий ожидаемый результат с полученным.
Соответственно тестирующий код будет таким:
Для сравнения ожидаемого результата с полученным используется метод AreEqual класса Assert. Данный класс всегда используется при написании unit тестов в Visual Studio.
Теперь, чтобы просмотреть все тесты, доступные для выполнения, необходимо открыть окно «Обозреватель тестов». Для этого в меню Visual Studio щёлкните на кнопку «ТЕСТ», выберите «Окна», а затем нажмите на пункт «Обозреватель тестов».
В студии появится следующее окно:
В данный момент список тестов пуст, поскольку решение ещё ни разу не было собрано. Выполним сборку нажатием клавиш Ctrl + Shift + B. После её завершения в «Обозревателе тестов» появится наш тест.
Синяя табличка с восклицательным знаком означает, что указанный тест никогда не выполнялся. Выполним его.
Для этого нажмём правой кнопкой мыши на его имени и выберем «Выполнить выбранные тесты».
Зелёный кружок с галочкой означает, что модульный тест успешно пройден: ожидаемый и полученный результаты равны.
Изменим код метода RectangleArea, вычисляющего площадь прямоугольника, чтобы сымитировать провал теста и посмотреть, как поведёт себя Visual Studio. Прибавим к возвращаемому значению 10.
Как Вы видите, красный круг с крестиком показывает провал модульного теста, а ниже указано, что при проверке ожидалось значение 15, а по факту оно равно 25.
Вы можете скачать исходник решения по ссылке ниже или перейти в репозиторий данного проекта на GitHub:
Тестирование программного обеспечения — рекомендации
Приведём правило, которым следует руководствоваться при написании и проведении тестов для оценки правильного функционирования программ.
Удобнее всего будет рассмотреть пример основанный на математике.
Так или иначе тестируемый метод или функция (или вся программа в целом) имеет свою область допустимых входных значений. Для проверки правильности работы метода достаточно провести тестирование метода на входных значениях начала и конца области допустимых значений (ОДЗ), одного значения из внутренней части области, а также -1 от левой и +1 от правой границы области.
Например, если ОЗД функции F — это отрезок [0; 100], то для проверки корректности работы функции достаточно протестировать следующие варианты: F(0), F(50) [не обязательно 50, можно взять любое число из внутренней части ОДЗ], F(100), F(-1), F(101).
Читайте также: