Как запустить тесты в visual studio

Обновлено: 06.07.2024

Расширение возможностей программного обеспечения и как следствие усложнение его архитектуры привело к тому, что возросли также сложность объём работы по его тестированию. В результате этого возникла необходимость автоматизации процесса тестирования. Чтобы программисту или тестировщику при каждой итерации не приходилось в очередной раз выполнять одни и те же действия по проверке правильности работы программы.

В качестве одного из вариантов решения данной задачи можно рассматривать модульное или Unit тестирование.

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

При этом «тестовый» компонент можно запускать на выполнение, не компилируя программу целиком, в том числе в автоматическом режиме. Это обеспечивает достаточно высокую степень автоматизации процесса тестирования и значительно сокращает время на его выполнение.

Важно отметить, что задача автоматизации тестирования в принципе не может быть решена полностью. В частности невозможно автоматизировать исследовательское тестирование [1]. Однако автоматизировать рутинные операции, например, интеграционное и регрессионное тестирование можно вполне. Последнее особенно важно, так как при создании новой версии программного обеспечения значительный объём работ по тестированию состоит именно в том, чтобы убедиться, что новый функционал не привёл к ошибкам в работе уже существующего.

Что собой представляет модульный (Unit) тест

Как уже говорилось выше, модульный тест это вспомогательный компонент программы, предназначенный для имитации её работы в целях тестирования. По сути, это не что иное, как программный сценарий, который вызывает те или иные функции тестируемой программы и анализирует результаты их работы.

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

Подобные фреймворки часто входят в состав интегрированных сред разработки (IDE). Собственный фреймворк для модульных тестов имеет и Visual Studio.

Для его использования в разделе «Тест» окна создания нового проекта есть специальный шаблон под названием «Проект модульного теста».

Что собой представляет данный шаблон?

При создании проекта модульного теста создаётся обычный класс, но:

  • Как сам класс, так и его методы помечаются специальными атрибутами TestClass и TestMethod соответственно.
    Данные атрибуты сообщают компилятору о том, что это класс модульного теста и тестовые методы.
  • Методы класса должны быть открытыми (public) и иметь тип void.

Класс модульного теста может включать и вспомогательные члены, но лучше всего всё, что связано с процессом тестирования располагать в тестовых методах.

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

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

Тест считается не пройденным (в работе программы присутствует ошибка), если в ходе выполнения тестового метода возникло исключение.

Используйте Visual Studio, чтобы определить и запустить модульные тесты для обеспечения работоспособности кода, нужного объема протестированного кода, а также для обнаружения ошибок и сбоев, прежде чем с ними столкнутся клиенты. Выполняйте модульные тесты регулярно, чтобы обеспечить правильную работу вашего кода.

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

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

Откройте проект, который хотите протестировать в Visual Studio.

Выберите узел решения в обозревателе решений. Затем в верхней строке меню выберите Файл > Добавить > Новый проект.

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

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

Шаблон проекта модульных тестов в Visual Studio 2019

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

Шаблон проекта модульных тестов в Visual Studio 2019

Выберите имя для тестового проекта, например HelloWorldTests, и нажмите OK.

Проект добавляется в решение.

Проект модульного теста в обозревателе решений

В проекте модульного тестирования добавьте ссылку на проект, который вы хотите протестировать, щелкнув правой кнопкой мыши Ссылки или Зависимости, после чего выбрав Добавить ссылку или Добавить ссылку на проект.

Выберите проект, содержащий код, который будет тестироваться, и нажмите OK.

Добавление ссылок на проект в Visual Studio

Добавьте код в метод модульных тестов.

Запуск модульных тестов

Откройте обозреватель тестов, выбрав Тест > Обозреватель тестов в верхней строке меню (или нажмите клавиши 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 2019

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

Просмотр результатов тестов

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

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

Дополнительные сведения о 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

Шаблон проекта тестирования NUnit в Visual Studio 2019

Щелкните Далее, назовите проект и нажмите кнопку Создать.

Задайте проекту имя и нажмите ОК, чтобы создать его.

Шаблон проекта содержит ссылки на пакеты NuGet для NUnit и NUnit3TestAdapter.

Зависимости NUnit NuGet в обозревателе решений

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

В обозревателе решений щелкните проект правой кнопкой мыши и выберите Добавить > Ссылка. (Ссылку также можно добавить из контекстного меню узла Ссылки или Зависимости.)

Добавьте код в метод теста.

Добавление кода в файл кода модульного теста

Запустите тест в обозревателе тестов или щелкните правой кнопкой мыши в коде теста и выберите Запустить тесты (или нажмите клавиши CTRL + R, T).

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

Модульное тестирование в Visual Studio

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

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

Class1 переименуем в Geometry.

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

Площадь прямоугольника, как известно, это произведение двух его сторон.

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

Чтобы выполнить unit-тестирование, необходимо в рамках того же самого решения создать ещё один проект соответствующего типа.

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

Модульное тестирование в Visual Studio

Перед Вами появится следующий код:

using Microsoft . VisualStudio . TestTools . UnitTesting ;

Директива [TestMethod] обозначает, что далее идёт метод, содержащий модульный (unit) тест. А [TestClass] в свою очередь говорит о том, что далее идёт класс, содержащий методы, в которых присутствуют unit-тесты.

В соответствии с принятыми соглашениями переименуем класс UnitTest1 в GeometryTests.

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

Также в коде необходимо подключить с помощью директивы using следующее пространство имён:

Займёмся написание теста. Проверим правильно ли вычисляет программа площадь прямоугольника со сторонами 3 и 5. Ожидаемый результат (правильное решение) в данном случае это число 15.

Тестирующий метод обычно содержит три необходимых компонента:

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

Соответственно тестирующий код будет таким:

using Microsoft . VisualStudio . TestTools . UnitTesting ;

Для сравнения ожидаемого результата с полученным используется метод AreEqual класса Assert. Данный класс всегда используется при написании unit тестов в Visual Studio.

Окно Обозреватель тестов

В студии появится следующее окно:

Обозреватель тестов в Visual Studio

Unit тест

Синяя табличка с восклицательным знаком означает, что указанный тест никогда не выполнялся. Выполним его.

Успешное выполнение модульного тестирования

Зелёный кружок с галочкой означает, что модульный тест успешно пройден: ожидаемый и полученный результаты равны.

Изменим код метода RectangleArea, вычисляющего площадь прямоугольника, чтобы сымитировать провал теста и посмотреть, как поведёт себя Visual Studio. Прибавим к возвращаемому значению 10.

Имитация провала unit теста

Как Вы видите, красный круг с крестиком показывает провал модульного теста, а ниже указано, что при проверке ожидалось значение 15, а по факту оно равно 25.

Вы можете скачать исходник решения по ссылке ниже или перейти в репозиторий данного проекта на GitHub:

Приведём правило, которым следует руководствоваться при написании и проведении тестов для оценки правильного функционирования программ.

Удобнее всего будет рассмотреть пример основанный на математике.

Так или иначе тестируемый метод или функция (или вся программа в целом) имеет свою область допустимых входных значений. Для проверки правильности работы метода достаточно провести тестирование метода на входных значениях начала и конца области допустимых значений (ОДЗ), одного значения из внутренней части области, а также -1 от левой и +1 от правой границы области.

Тестирование в Visual Studio

Поэтому возникает необходимость как-то это тестирование автоматизировать, хотя бы частично. Автоматизация такого процесса заключается в том, что приходится помимо программы, которая решает бизнес-задачу, писать ещё программу для тестирования.

Для чего это всё нужно? Представим ситуацию: вы написали сложную программу, которая содержит множество классов. Вы всё проверили о оттестировали. Возникла необходимость внести изменения в какой-то класс. После таких изменений может возникнуть ситуация, что программа вдруг перестаёт работать корректно на каком-то шаге (при добавлении нового функционала перестаёт работать старый). В данном случае, если у вас есть тестовые методы, можно их запустить и проверить работоспособность. Таким образом тестирование предотвращает появление данных проблем и позволяет быстро проверить работоспособность.

В состав Visual Studio входит модульное тестирование.

Такое тестирование отдельных частей программы, называется unit-тестированием (модульное тестирование) .

Задача состоит в том, чтобы написать дополнительный класс с методами, который будет тестировать наши основные классы.

Как создать модули-тестирования?

Добавим новый проект в наш "Solution". Воспользуемся мастером, который входит в состав "Visual Studio". Шаблон проекта: "Unit Test Project" (Проект модульного теста). Имя проекта укажем "MyTest":

Тестирование в Visual Studio

Отличие от обычно класса заключается в том, что здесь присутствуют атрибуты "TestClass" и "TestMethod":

Эти 2 атрибута навешены для того, чтобы компонент NUnit (компонент Visual Studio) , когда мы захотим запустить тесты, понял где эти тесты находятся.
В этом тестовом проекте необходимо добавить ссылку ("Add reference") на основной проект, также добавить ссылку на основной проект, используя using.

Что является пройденным и непройденным тестированием?

Если метод нормально закончил работу, значит тест считается пройденным. Если было выброшено любое исключение, то тест считается непройденным. Исключения можно выбрасывать самим. Также можно использовать методы класса "Assert".Например, у данного класса есть метод "AreEqual()". Он сравнивает то, что ожидаем получить с тем, что получилось по факту.

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

Давайте напишем простой пример.

Напишем класс "Room"

Класс для тестирования:

Если мы теперь запустим тестирование, то выйдет ошибка тестирования (на скриншоте):

Тестирование в Visual Studio-3

В данной статье вы немного узнали про модульное тестирование в Visual Studio, а также как его запускать.

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

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.

Читайте также: