Практическая работа № 12. Тестирование классов
Модульные тесты обеспечивают автоматическое тестирование программного обеспечения во время разработки и публикации. MSTest — это одна из трех доступных для выбора платформ тестирования. Другими являются xUnit и nUnit.
Запустите Visual Studio.
ClassLibraryProjects Откройте решение, созданное в окне ClassLibraryProjects.
Добавьте в решение новый проект модульного теста с именем StringLibraryTest.
Щелкните решение правой кнопкой мыши в Обозреватель решений и выберите ДобавитьНовый проект.
На странице Добавить новый проект введите в поле поиска mstest. Выберите C# или Visual Basic из списка языков, а затем — Все платформы из списка платформ.
Выберите шаблон Тестовый проект MSTest и щелкните Далее.
На странице Настроить новый проект введите StringLibraryTest в поле Имя проекта. Нажмите кнопку Далее.
На странице Дополнительные сведения выберите .NET 5.0 (текущая) в поле Целевая платформа. Затем нажмите кнопку Создать.
Visual Studio создаст проект и откроет файл класса в окне кода с помощью следующего кода: Если нужный язык не отображается, измените выбор языка в верхней части страницы.
Исходный код, созданный шаблоном модульного теста, выполняет следующие действия.
Он импортирует пространство имен Microsoft.VisualStudio.TestTools.UnitTesting, которое содержит типы, используемые для модульного тестирования.
Он применяет атрибут TestClassAttribute к классу UnitTest1.
Он применяет атрибут TestMethodAttribute для определения TestMethod1 в C# или TestSub в Visual Basic.
При запуске модульного теста автоматически выполняются все методы теста, помеченные атрибутом [TestMethod], в тестовом классе, помеченном атрибутом [TestClass].
Добавление ссылки на проект
Чтобы StringLibrary тестовый проект работал с StringLibrary классом, добавьте в проект ссылку на проект StringLibrary .
В обозревателе решений правой кнопкой мыши щелкните узел Зависимости в проекте StringLibraryTest и в контекстном меню выберите пункт Добавить ссылку на проект.
В диалоговом окне Диспетчер ссылок разверните узел Проекты и установите флажок рядом с пунктом StringLibrary. Добавление ссылки на StringLibrary сборку позволяет компилятору находить методы StringLibrary при компиляции проекта StringLibraryTest .
Нажмите кнопку ОК.
Добавление и выполнение методов модульного теста
когда Visual Studio выполняет модульный тест, он выполняет каждый метод, помеченный TestMethodAttribute атрибутом в классе, помеченном TestClassAttribute атрибутом. Метод теста завершается, когда происходит первый сбой или когда все тесты, содержащиеся в методе, будут успешно выполнены.
В самых распространенных тестах вызываются члены класса Assert. Многие методы утверждения (Assert) принимают по крайней мере два параметра, из которых один представляет ожидаемый результат теста, а второй — фактический результат теста. Наиболее популярные из этих методов класса Assert перечислены в следующей таблице:
Методы утверждения | Функция |
Assert.AreEqual | Проверяет равенство двух значений или объектов. Утверждение не выполняется, если значения или объекты не равны. |
Assert.AreSame | Проверяет, что две объектные переменные ссылаются на один и тот же объект. Утверждение не выполняется, если переменные ссылаются на разные объекты. |
Assert.IsFalse | Проверяет, что условие имеет значение false. Утверждение не выполняется, если условие имеет значение true. |
Assert.IsNotNull | Проверяет, что объект не имеет значение null. Утверждение не выполняется, если объект является null. |
Вы можете также использовать метод Assert.ThrowsException в методе теста, чтобы указать тип исключения, которое он должен создавать. Такой тест считается не выполненным, если заявленное исключение не было создано.
Для тестирования метода StringLibrary.StartsWithUpper необходимо предоставить несколько строк, которые начинаются с символов верхнего регистра. Предполагается, что в этих случаях метод возвратит true, поэтому можно вызвать метод Assert.IsTrue. Представьте также несколько строк, которые не начинаются с символов верхнего регистра. Предполагается, что в этих случаях метод возвратит false, поэтому можно вызвать метод Assert.IsFalse.
Так как ваш метод библиотеки обрабатывает строки, нам нужно проверить правильность обработки пустых строк () (так называется допустимая строка, которая не содержит символов и для которой свойство Length имеет значение 0) и строки null, которая не была инициализирована. Метод StartsWithUpper можно вызвать напрямую как статический метод и передать ему один аргумент типа String. Или метод StartsWithUpper можно вызвать как метод расширения для переменной string, которой назначено значение null.
Вы определите три метода, каждый из которых вызывает метод Assert для каждого элемента в массиве строк. Вы вызовете перегруженную версию метода, которая позволяет указать сообщение об ошибке, отображаемое в случае сбоя теста. В этом сообщении определяется строка, вызвавшая сбой.
Создание методов теста:
В окне кода UnitTest1.cs или UnitTest1.vb замените отображаемый код на следующий текст:
Тест на символы верхнего регистра в методе TestStartsWithUpper включает заглавную греческую букву "альфа" (U+0391) и заглавную кириллическую букву "М" (U+041C). Тест на символы нижнего регистра в методе TestDoesNotStartWithUpper включает строчную греческую букву "альфа" (U+03B1) и строчную кириллическую букву "г" (U+0433).
В строке меню выберите файл сохранить UnitTest1. CS AS или файл сохранить UnitTest1. vb как. В диалоговом окне Сохранить файл как щелкните стрелку рядом с кнопкой Сохранить и выберите вариант Сохранить с кодировкой.
В диалоговом окне Подтверждение сохранения нажмите кнопку Да, чтобы сохранить файл.
В диалоговом окне Дополнительные параметры сохранения выберите в раскрывающемся списка Кодировка вариант Юникод (UTF-8, с сигнатурой), кодовая страница 65001 и нажмите кнопку ОК.
Если вы не сохраните исходный код в кодировке UTF8, Visual Studio может сохранить его как файл ASCII. В этом случае среде выполнения не удастся правильно раскодировать символы UTF8 за пределами стандартного диапазона ASCII, и результаты теста будут неправильными.
В строке меню выберите тест выполнить все тесты. Если окно обозревателя тестов не открывается, откройте его, выбрав тестовый Обозреватель тестов. В разделе Пройденные тесты перечислены три теста, а раздел Сводка содержит результат тестового запуска.
Обработка сбоев теста
Выполняя разработку на основе тестирования (TDD), вы сначала пишете тесты, и они завершаются сбоем при первом запуске. Затем вы добавляете код в приложение, и тест успешно выполняется. В рамках этого учебника вы создали тест после написания кода приложения для его проверки, поэтому тест был пройден. Чтобы проверить, завершается ли тест ошибкой, как и ожидается, добавьте недопустимое значение во входные данные теста.
Измените массив words в методе TestDoesNotStartWithUpper, включив в него строку "Error". Сохранять файл не требуется, поскольку при сборке решения для выполнения тестов Visual Studio автоматически сохраняет открытые файлы.
Запустите тест, выбрав пункт тест выполнить все тесты в строке меню. В окне Обозреватель тестов будет указано, что два теста выполнены успешно, а третий завершился ошибкой.
Выберите непройденный тест TestDoesNotStartWith.
В окне Обозреватель тестов появится сообщение, созданное методом утверждения "Assert.IsFalse failed. Expected for 'Error': false; actual: True". Из-за этого сбоя строки в массиве, расположенные после слова "Error", не проверялись.
Удалите строку "Error", которую вы добавили на шаге 1. Еще раз запустите тест. Теперь тесты будут пройдены.
Тестирование версии выпуска для библиотеки
Теперь, когда все тесты пройдены при выполнении сборки в режиме отладки, следует запустить все тесты еще раз, теперь уже для сборки библиотеки в режиме выпуска. Некоторые факторы, например оптимизации компилятора, иногда могут вызывать разное поведение сборки в режимах отладки и выпуска.
Протестируйте сборку выпуска следующим образом.
В панели инструментов Visual Studio измените конфигурацию сборки с режима Отладка на Выпуск.
В обозревателе решений щелкните проект StringLibrary правой кнопкой мыши и выберите в контекстном меню пункт Сборка, чтобы выполнить повторную компиляцию библиотеки.
Запустите модульные тесты, выбрав тест выполнить все тесты в строке меню. Все тесты будут пройдены.