Тестирование в Visual Studio
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали немного о том, что такое интерфейсы в C#. В данной статье я бы хотел рассказать о том, как тестировать написанный код в Visual Studio. Перед тем, как отдать программу конечным пользователям, она должна быть тщательно проанализирована и протестирована. На это уходит большое количество времени. Разработка проекта обычно идёт достаточно быстро, что затрудняет возможность ручного тестирования программ.
Поэтому возникает необходимость как-то это тестирование автоматизировать, хотя бы частично. Автоматизация такого процесса заключается в том, что приходится помимо программы, которая решает бизнес-задачу, писать ещё программу для тестирования.
Для чего это всё нужно? Представим ситуацию: вы написали сложную программу, которая содержит множество классов. Вы всё проверили о оттестировали. Возникла необходимость внести изменения в какой-то класс. После таких изменений может возникнуть ситуация, что программа вдруг перестаёт работать корректно на каком-то шаге (при добавлении нового функционала перестаёт работать старый). В данном случае, если у вас есть тестовые методы, можно их запустить и проверить работоспособность. Таким образом тестирование предотвращает появление данных проблем и позволяет быстро проверить работоспособность.
В состав Visual Studio входит модульное тестирование.
Такое тестирование отдельных частей программы, называется unit-тестированием (модульное тестирование).
Задача состоит в том, чтобы написать дополнительный класс с методами, который будет тестировать наши основные классы.
Как создать модули-тестирования?
Это обычные C#-классы, который компилируется в dll-файл, но эти C#-классы должны быть размечены с помощью специальных атрибутов.
Добавим новый проект в наш "Solution". Воспользуемся мастером, который входит в состав "Visual Studio". Шаблон проекта: "Unit Test Project" (Проект модульного теста). Имя проекта укажем "MyTest":
Отличие от обычно класса заключается в том, что здесь присутствуют атрибуты "TestClass" и "TestMethod":
[TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } }
Атрибут — это некий ярлык, который можно навесить на класс, на метод, на поле, на свойство. Атрибут представляет из себя класс. Если существует атрибут "TestClass", то существует класс "TestClassAttribute".
Эти 2 атрибута навешены для того, чтобы компонент NUnit (компонент Visual Studio), когда мы захотим запустить тесты, понял где эти тесты находятся.
В этом тестовом проекте необходимо добавить ссылку ("Add reference") на основной проект, также добавить ссылку на основной проект, используя using.
Что является пройденным и непройденным тестированием?
Если метод нормально закончил работу, значит тест считается пройденным. Если было выброшено любое исключение, то тест считается непройденным. Исключения можно выбрасывать самим. Также можно использовать методы класса "Assert".Например, у данного класса есть метод "AreEqual()". Он сравнивает то, что ожидаем получить с тем, что получилось по факту.
Тесты запускаются через "Run — All Tests" (Ctrl + R).
Также есть атрибут "TestInitialize" и "TestCleanup", который навешивается на метод. Методы, помеченные данными атрибутами будут вызываться один раз.
"TestInitialize" вызывается перед тестированием, "TestCleanup" — после тестирования.
Обычно эти атрибуты используются при сложном тестировании. Для чего они могут быть нужны? Допустим перед началом тестирования вам нужно поместить какие-то тестовые данные в базу данных, либо какой-нибудь файл. После окончания тестирования то содержимое, которое мы добавили для этой базы или файла, нужно удалить.
Давайте напишем простой пример.
Напишем класс "Room"
public class Room { public int length; }
Класс для тестирования:
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using TestApplicationForStudy; namespace MyTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { Room room1 = new Room(); room1.length = 10; // Пусть длина комнаты будет 10 Assert.AreEqual(15, room1.length); // А мы ожидали получить 15 } } }
Если мы теперь запустим тестирование, то выйдет ошибка тестирования (на скриншоте):
В данной статье вы немного узнали про модульное тестирование в Visual Studio, а также как его запускать.
Пусть вас не вводит в заблуждение простота данного примера, на самом деле код для тестирования занимает гораздо больше строк. Его количество зависит от того функционала, который вы хотите протестировать.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.
Спасибо, Алексей, за статью «ТЕСТИРОВАНИЕ В VISUAL STUDIO»
Приведенный в статье пример у меня тоже прошел.
Я решил сделать простейший пример с формой, где описал простейший метод
public int Sum(int x, int y){return x+y);
однако в стоке Assert.AreEqual(10, form.Sum(9,8));
диагностируется ошибка (подчеркнуто слово Sum)
система выдает:
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка CS0012 Тип «Form» определен в сборке, на которую нет ссылки. Следует добавить ссылку на сборку «System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″. MyTest E:\STUDY\CS\4operations\MyTest\UnitTest1.cs 25 Активный
Как исправит эту ошибку?