Как запустить код с в visual studio
Перейти к содержимому

Как запустить код с в visual studio

  • автор:

Создание модульных тестов для нечеткого тестирования с использованием IntelliTest

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

IntelliTest изучает код .NET, чтобы создать тестовые данные и набор модульных тестов. Для каждого оператора в коде создаются входные данные теста, которые будут выполнять этот оператор. Анализ случая выполняется для каждой условной ветви в коде. Например, анализируются операторы if , утверждения и все операции, которые могут вызывать исключения. Этот анализ используется в целях создания данных теста для параметризованного модульного теста для каждого из методов, создающих модульные тесты с высоким покрытием кода. Это можно рассматривать как нечеткое смарт-тестирование, при котором обрезаются входные данные и тестовые случаи для выполнения всех ваших логических ветвей и проверки на предмет исключений.

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

Высокая доступность и расширения

Команды меню Создать IntelliTest и Запустить IntelliTest

  • Доступны в только в версии Visual Studio Enterprise Edition.
  • Поддерживают только код C#, предназначенный для .NET Framework.
  • Расширяемые и поддерживают порождающие тесты в формате MSTest, MSTest V2, NUnit и xUnit.
  • Не поддерживают конфигурацию x64.

Изучение. Использование IntelliTest для изучения кода и создания модульных тестов

Для формирования модульных тестов типы должны быть открытыми.

  1. Откройте решение в Visual Studio и откройте файл класса, содержащий методы, которые вы хотите протестировать.
  2. Щелкните правой кнопкой мыши метод и выберите пункт Запустить IntelliTest, чтобы создать модульные тесты для кода в используемом методе.

Screenshot of right click on method to generate unit tests.

Screenshot of right click on method to generate unit tests.

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

Screenshot of Exploration Results window.

Screenshot of Exploration Results window.

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

Screenshot of test results to view from list.

Screenshot of test results to view from list.

Убедитесь, что полученные результаты для выполненных тестов в столбце результатов соответствуют ожидаемому коду. Для тестов, которые завершились ошибкой, исправьте код соответствующим образом. Затем перезапустите IntelliTest для проверки исправлений.

Сохранение. Сохранение модульных тестов в виде набора регрессий

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

Screenshot of Save test results.

Screenshot of Save test results.

Можно просмотреть тестовый проект и параметризованный модульный тест, который был создан, — отдельные модульные тесты, соответствующие каждой строке, сохраняются в файл .g.cs в тестовом проекте, а параметризованный модульный тест сохраняется в соответствующий CS-файл. Вы можете запускать модульные тесты и просматривать результаты в обозревателе тестов так же, как в случае с любыми созданными вручную модульными тестами.

Screenshot of saved tests in Solution Explorer.

Screenshot of saved tests in Solution Explorer.

Помощь. Использование IntelliTest для просмотра кода

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

Screenshot of View warnings.

Screenshot of View warnings.

Screenshot of Fix warning.

Screenshot of Fix warning.

Screenshot of Rerun IntelliTest after fix.

Screenshot of Rerun IntelliTest after fix.

Указание. Использование IntelliTest для проверки правильности свойств, указанных в коде

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

Вопросы & ответы

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

Ответ. Нет. IntelliTest работает только с управляемым кодом.

Вопрос. Каковы условия выполнения или сбоя созданного теста?

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

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

  • PexAllowedExceptionAttribute
  • PexAllowedExceptionFromTypeAttribute
  • PexAllowedExceptionFromTypeUnderTestAttribute
  • PexAllowedExceptionFromAssemblyAttribute

Вопрос. Можно ли добавить допущения в параметризованный модульный тест?

Ответ. Да, используйте допущения, чтобы указать, какие данные теста не нужны для модульного теста при использовании определенного метода. Используйте класс PexAssume для добавления допущений. Например, можно добавить допущение, что переменная lengths не является NULL в отличие от этой.

Если добавляется допущение и перезапускается IntelliTest, тестовые данные, которые больше не нужны, будут удалены.

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

Ответ. Да, IntelliTest проверит правильность утверждения в операторе при запуске модульных тестов. Для добавления утверждений используйте класс PexAssert или API утверждения, входящий в состав платформы тестирования. Например, можно добавить утверждение о равенстве двух переменных.

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

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

О . Да, щелкните правой кнопкой мыши в коде класса или метода и выберите пункт Создать IntelliTest.

Screenshot of Create IntelliTest.

Screenshot of Create IntelliTest.

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

Screenshot of Create IntelliTest with MSTest default.

Screenshot of Create IntelliTest with MSTest default.

В. Можно ли использовать другие платформы модульного тестирования с IntelliTest?

О . Да, выполните инструкции по поиску и установке других платформ. Расширения платформы тестирования также доступны в Visual Studio Marketplace, например генератор тестов NUnit.

Перезапустив Visual Studio и открыв решение повторно, щелкните правой кнопкой мыши в коде класса или метода и выберите пункт Создать IntelliTest. Выберите установленную платформу здесь:

Screenshot of Select other unit test framework for IntelliTest.

Screenshot of Select other unit test framework for IntelliTest.

Затем запустите IntelliTest, чтобы сформировать отдельные модульные тесты в соответствующих файлах .g.cs.

Вопрос. Можно получить более подробную информацию о создании тестов?

О . Да, общий обзор приведен в этой записи блога.

Как запустить JS-код

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

Из-за широкого спектра применения JavaScript можно запустить несколькими способами:

  • через вкладку «Консоль» в веб-браузере;
  • с помощью Node.js
  • с помощью веб-страницы.

Через вкладку «Консоль» в браузере

В большинстве современных браузеров уже есть встроенные механизмы JavaScript, поэтому запустить код на JS можно прямо в браузере. Вот, как это сделать:

Шаг 1. Откройте любой браузер (мы будем использовать Google Chrome).

Шаг 2. Откройте инструменты разработчика. Для этого щелкните правой кнопкой мыши на пустой области и выберите пункт «Просмотреть код» (Inspect). Горячая клавиша: F12.

Шаг 3. В инструментах разработчика перейдите на вкладку «Консоль» (Console). Здесь уже можно писать код на JavaScript. Попробуйте ввести console.log(«Hello, world!») и нажмите Enter, чтобы запустить код.

С помощью Node.js

Node — среда выполнения кода JavaScript вне браузера. Вот, как запустить JS с помощью Node.js:

Шаг 1. Установите последнюю версию Node.js.

Шаг 2. Установите IDE или текстовый редактор. Мы будем использовать Visual Studio Code.

Шаг 3. В VS Code перейдите в Файл > Новый файл и напишите код на JS. Сохраните файл с расширением .js. Мы написали программу, которая выводит на экран строку «Hello, world!», поэтому файл будет называться helloworld.js.

Шаг 4. Откройте терминал/командную строку, перейдите к расположению файла (используйте команду cd ). Введите node helloworld.js и нажмите Enter. Вывод появится в терминале.

Примечание. JavaScript-код можно написать и запустить непосредственно в терминале. Для этого просто введите node и нажмите Enter.

С помощью веб-страницы

JavaScript изначально создавали для того, чтобы сделать веб-страницы интерактивными, поэтому JavaScript и HTML идут рука об руку. Вот, как запустить код на JS с помощью веб-страницы:

Шаг 1. Откройте VS Code. Перейдите в Файл > Новый файл. Сохраните файл с расширением .html. У нас это будет main.html.

Шаг 2. Скопируйте doctype, расположенный ниже. Это необходимый для запуска HTML-страницы код. Сохраните скопированный текст в файле.

    Codechick  

Шаг 3. Аналогично создайте файл с расширением .js. Напишите в файле следующий JS-код и сохраните его. У нас это будет helloworld.js.

console.log("Hello, world!");

Шаг 4. Вернитесь к файлу main.html и на 11 строке впишите название JS-файла. В нашем случае это будет выглядеть так:

Шаг 5. Откройте main.html с помощью браузера.

Шаг 6. Чтобы проверить, запустился ли ваш JS-код, щелкните правой кнопкой мыши в свободной области, нажмите «Просмотреть код» и перейдите на вкладку «Консоль».

Теперь, когда вы знаете, как запустить JavaScript, приступим к изучению основ JS.

СodeСhick.io — простой и эффективный способ изучения программирования.

2023 © ООО «Алгоритмы и практика»

Установка и вход в Live Share в Visual Studio Code

Вы готовы организовать совместную работу с помощью Live Share в Visual Studio Code? В этой статье показано, как настроить сеанс совместной работы в Visual Studio Code с помощью расширения Live Share.

Действия совместной работы, описанные здесь, включают один узел сеанса совместной работы и один или несколько гостей. Организатор — это пользователь, запустивший сеанс совместной работы, а гость — любой, кто присоединится к сеансу.

Вам достаточно краткой сводки? Перейдите к кратким руководствам по общему доступу или присоединению.

Знаете ли вы, что можно присоединиться к собственному сеансу совместной работы? Так вы сможете поработать с Live Share самостоятельно или запустить экземпляр Visual Studio или Visual Studio Code и подключиться к нему удаленно. Вы можете даже использовать одно удостоверение в обоих экземплярах. Проверьте ее.

Необходимые компоненты

Прежде всего вам необходима поддерживаемая версия Visual Studio Code, соответствующая базовым требованиям для Live Share.

Вам потребуется Visual Studio Code (1.72.0 или более поздней версии) на одном из следующих операционных систем:

  • Windows: 7, 8.1 или 10.
  • macOS: Sierra (10.12) и более поздних версий.
  • Linux: 64-разрядная версия Ubuntu Desktop 16.04 или более поздних версий, Fedora Workstation 27 или более поздних версий или CentOS 7.
    • 32-разрядная версия Linux не поддерживается.
    • В настоящее время ARM не поддерживается.
    • Сведения об использовании нисходящих дистрибутивов и других дистрибутивов см. в статье Сведения об установке Linux.

    Установка расширения Live Share

    Скачивая и используя Visual Studio Live Share, вы соглашаетесь с условиями лицензии и заявлением о конфиденциальности. Если у вас возникают проблемы, ознакомьтесь с руководством по устранению неполадок.

    1. Установите Visual Studio Code.
    2. Скачайте и установите расширение Visual Studio Live Share из Marketplace.
    3. Перезагрузите Visual Studio Code.

    Button to download Live Share.

    Действия по установке Linux

    Среда Linux бывает очень разной. Учитывая количество сред и дистрибутивов для рабочего стола, установить Live Share может быть сложно. Процесс должен быть простым, если вы используете официальные дистрибутивы Visual Studio Code и:

    • Ubuntu Desktop версии 16.04 и более поздних версий.
    • Рабочая станция Fedora версии 27 и более поздних версий.
    • CentOS 7.

    Если вы используете нестандартную конфигурацию или подчиненное распределение, у вас могут возникнуть осложнения. Дополнительные сведения см. в статье Сведения об установке Linux.

    Интеграция с браузером в Linux

    Visual Studio Live Share обычно не требует дополнительных действий по установке, чтобы включить интеграцию браузера в Linux.

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

    Вход в Live Share

    Для совместной работы необходимо выполнить вход в Visual Studio Live Share, чтобы все пользователи знали, кто вы. Этот вход является мерой безопасности и не добавляет вас в маркетинговые мероприятия или другие исследовательские мероприятия. Вы можете войти с помощью личной учетной записи Майкрософт (например, @outlook.com), рабочей или учебной учетной записи Майкрософт (Azure Active Directory) либо учетной записи GitHub. Войти очень просто.

    Выберите live Share в строке состояния или нажмите клавиши CTRL+SHIFT+P или CMD+SHIFT+P , а затем выберите Live Share: Вход.

    Screenshot that shows the Visual Studio Code Live Share button.

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

    Screenshot that shows the Live Share sign in options.

    Если Visual Studio Code не выбирает вход после завершения процесса входа в браузере, ознакомьтесь с дополнительными советами по устранению неполадок .

    Руководство. Тестирование библиотеки классов .NET с помощью Visual Studio Code

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

    Необходимые компоненты

    • В этом руководстве используется решение, созданное при работе со статьей Создание библиотеки классов .NET в Visual Studio Code.

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

    Модульные тесты обеспечивают автоматическое тестирование программного обеспечения во время разработки и публикации. В этом руководстве используется платформа тестирования MSTest. MSTest — это одна из трех доступных для выбора платформ тестирования. Другими являются xUnit и nUnit.

    1. Запустите Visual Studio Code.
    2. Откройте решение ClassLibraryProjects , созданное при работе со статьей Создание библиотеки классов .NET в Visual Studio Code.
    3. Создайте проект модульного теста с именем StringLibraryTest.

    dotnet new mstest -o StringLibraryTest 

    Шаблон проекта создает файл UnitTest1.cs со следующим кодом:

    namespace StringLibraryTest; [TestClass] public class UnitTest1 < [TestMethod] public void TestMethod1() < >> 
    • Он применяет атрибут TestClassAttribute к классу UnitTest1 .
    • Он применяет атрибут TestMethodAttribute для определения TestMethod1 .
    • Он импортирует пространство имен Microsoft.VisualStudio.TestTools.UnitTesting, которое содержит типы, используемые для модульного тестирования. Пространство имен импортируется с помощью директивы global using в GlobalUsings.cs.

    При вызове модульного теста автоматически выполняются все методы теста, помеченные атрибутом [TestMethod], в тестовом классе, помеченном атрибутом [TestClass].

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj 

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

    Чтобы тестовый проект работал с классом StringLibrary , добавьте в проект StringLibraryTest ссылку на проект StringLibrary .

      Выполните следующую команду:

    dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj 

    Добавление и выполнение методов модульного теста

    При вызове модульного теста 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.

    Так как метод библиотеки обрабатывает строки, необходимо также убедиться, что он обрабатывает пустую строку ( String.Empty ), а также строку null . Пустая строка не содержит символов, а ее свойство Length равно 0. Строка null является неинициализированной строкой. Метод StartsWithUpper можно вызвать напрямую как статический метод и передать ему один аргумент типа String. Или метод StartsWithUpper можно вызвать как метод расширения для переменной string , которой назначено значение null .

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

    Создание методов теста:

      Откройте файл StringLibraryTest/UnitTest1.cs и замените все его содержимое следующим кодом:

    using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest; [TestClass] public class UnitTest1 < [TestMethod] public void TestStartsWithUpper() < // Tests that we expect to return true. string[] words = < "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" >; foreach (var word in words) < bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '': true; Actual: ", word, result)); > > [TestMethod] public void TestDoesNotStartWithUpper() < // Tests that we expect to return false. string[] words = < "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " >; foreach (var word in words) < bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '': false; Actual: ", word, result)); > > [TestMethod] public void DirectCallWithNullOrEmpty() < // Tests that we expect to return false. string?[] words = < string.Empty, null >; foreach (var word in words) < bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '': false; Actual: ", word == null ? "" : word, result)); > > > 
    dotnet test StringLibraryTest/StringLibraryTest.csproj 

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

    Starting test execution, please wait. A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net8.0) 

    Обработка сбоев теста

    Выполняя разработку на основе тестирования (TDD), вы сначала пишете тесты, и они завершаются сбоем при первом запуске. Затем вы добавляете код в приложение, и тест успешно выполняется. В рамках этого учебника вы создали тест после написания кода приложения для его проверки, поэтому тест был пройден. Чтобы проверить, завершается ли тест ошибкой, как и ожидается, добавьте недопустимое значение во входные данные теста.

      Измените массив words в методе TestDoesNotStartWithUpper , включив в него строку «Error».

    string[] words = < "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " >; 
    dotnet test StringLibraryTest/StringLibraryTest.csproj 

    Выходные данные терминала показывают, что один тест завершается ошибкой, и он предоставляет сообщение об ошибке для неудачного теста: «Assert.IsFalse не удалось. Expected for ‘Error’: false; actual: True». Из-за этого сбоя строки в массиве, расположенные после слова «Error», не проверялись.

    Starting test execution, please wait. A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0) 

    Тестирование версии выпуска для библиотеки

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

      Запустите тесты с конфигурацией сборки «Выпуск».

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release 

    Отладка тестов

    Если в качестве IDE вы используете Visual Studio Code, то можете следовать инструкциям из руководства по отладке консольного приложения .NET с помощью Visual Studio Code, чтобы выполнить отладку кода с применением проекта модульного теста. Вместо запуска проекта приложения ShowCase откройте StringLibraryTest/UnitTest1.cs и выберите Debug All Tests (Выполнить отладку всех тестов) между строками 7 и 8. Если вы не можете найти его, нажмите клавиши CTRL + SHIFT + P , чтобы открыть палитру команд, и введите команду перезагрузки окна.

    Visual Studio Code запускает тестовый проект с присоединенным отладчиком. Выполнение будет прервано в любой точке останова, добавленной в тестовый проект или базовый код библиотеки.

    Дополнительные ресурсы

    Следующие шаги

    В этом руководстве вы выполнили модульное тестирование библиотеки классов. Чтобы сделать библиотеку доступной другим пользователям, опубликуйте ее в NuGet в качестве пакета. Чтобы узнать, как это делать, следуйте указаниям в руководстве по NuGet:

    Если библиотека опубликована как пакет NuGet, ее могут устанавливать и использовать другие пользователи. Чтобы узнать, как это делать, следуйте указаниям в руководстве по NuGet:

    Библиотеку не нужно распространять как пакет. Ее можно объединить с консольным приложением, где она используется. Чтобы узнать, как опубликовать консольное приложение, ознакомьтесь с предыдущим руководством в этой серии:

    Пакет средств разработки для расширения Visual Studio Code C# предоставляет дополнительные средства для разработки приложений и библиотек C#:

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

    Необходимые компоненты

    • В этом руководстве используется решение, созданное при работе со статьей Создание библиотеки классов .NET в Visual Studio Code.

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

    Модульные тесты обеспечивают автоматическое тестирование программного обеспечения во время разработки и публикации. В этом руководстве используется платформа тестирования MSTest. MSTest — это одна из трех доступных для выбора платформ тестирования. Другими являются xUnit и nUnit.

    1. Запустите Visual Studio Code.
    2. Откройте решение ClassLibraryProjects , созданное при работе со статьей Создание библиотеки классов .NET в Visual Studio Code.
    3. Создайте проект модульного теста с именем StringLibraryTest.

    dotnet new mstest -o StringLibraryTest 

    Шаблон проекта создает файл UnitTest1.cs со следующим кодом:

    using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest < [TestClass] public class UnitTest1 < [TestMethod] public void TestMethod1() < >> > 
    • Он импортирует пространство имен Microsoft.VisualStudio.TestTools.UnitTesting, которое содержит типы, используемые для модульного тестирования.
    • Он применяет атрибут TestClassAttribute к классу UnitTest1 .
    • Он применяет атрибут TestMethodAttribute для определения TestMethod1 .

    При вызове модульного теста автоматически выполняются все методы теста, помеченные атрибутом [TestMethod], в тестовом классе, помеченном атрибутом [TestClass].

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj 

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

    Чтобы тестовый проект работал с классом StringLibrary , добавьте в проект StringLibraryTest ссылку на проект StringLibrary .

      Выполните следующую команду:

    dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj 

    Добавление и выполнение методов модульного теста

    При вызове модульного теста 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.

    Так как метод библиотеки обрабатывает строки, необходимо также убедиться, что он обрабатывает пустую строку ( String.Empty ), а также строку null . Пустая строка не содержит символов, а ее свойство Length равно 0. Строка null является неинициализированной строкой. Метод StartsWithUpper можно вызвать напрямую как статический метод и передать ему один аргумент типа String. Или метод StartsWithUpper можно вызвать как метод расширения для переменной string , которой назначено значение null .

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

    Создание методов теста:

      Откройте файл StringLibraryTest/UnitTest1.cs и замените все его содержимое следующим кодом:

    using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest; [TestClass] public class UnitTest1 < [TestMethod] public void TestStartsWithUpper() < // Tests that we expect to return true. string[] words = < "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" >; foreach (var word in words) < bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '': true; Actual: ", word, result)); > > [TestMethod] public void TestDoesNotStartWithUpper() < // Tests that we expect to return false. string[] words = < "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " >; foreach (var word in words) < bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '': false; Actual: ", word, result)); > > [TestMethod] public void DirectCallWithNullOrEmpty() < // Tests that we expect to return false. string?[] words = < string.Empty, null >; foreach (var word in words) < bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '': false; Actual: ", word == null ? "" : word, result)); > > > 
    dotnet test StringLibraryTest/StringLibraryTest.csproj 

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

    Starting test execution, please wait. A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net7.0) 

    Обработка сбоев теста

    Выполняя разработку на основе тестирования (TDD), вы сначала пишете тесты, и они завершаются сбоем при первом запуске. Затем вы добавляете код в приложение, и тест успешно выполняется. В рамках этого учебника вы создали тест после написания кода приложения для его проверки, поэтому тест был пройден. Чтобы проверить, завершается ли тест ошибкой, как и ожидается, добавьте недопустимое значение во входные данные теста.

      Измените массив words в методе TestDoesNotStartWithUpper , включив в него строку «Error».

    string[] words = < "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " >; 
    dotnet test StringLibraryTest/StringLibraryTest.csproj 

    Выходные данные терминала показывают, что один тест завершается ошибкой, и он предоставляет сообщение об ошибке для неудачного теста: «Assert.IsFalse не удалось. Expected for ‘Error’: false; actual: True». Из-за этого сбоя строки в массиве, расположенные после слова «Error», не проверялись.

    Starting test execution, please wait. A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0) 

    Тестирование версии выпуска для библиотеки

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

      Запустите тесты с конфигурацией сборки «Выпуск».

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release 

    Отладка тестов

    Если в качестве IDE вы используете Visual Studio Code, то можете следовать инструкциям из руководства по отладке консольного приложения .NET с помощью Visual Studio Code, чтобы выполнить отладку кода с применением проекта модульного теста. Вместо запуска проекта приложения ShowCase откройте StringLibraryTest/UnitTest1.cs и выберите Debug All Tests (Выполнить отладку всех тестов) между строками 7 и 8. Если вы не можете найти его, нажмите клавиши CTRL + SHIFT + P , чтобы открыть палитру команд, и введите команду перезагрузки окна.

    Visual Studio Code запускает тестовый проект с присоединенным отладчиком. Выполнение будет прервано в любой точке останова, добавленной в тестовый проект или базовый код библиотеки.

    Дополнительные ресурсы

    Следующие шаги

    В этом руководстве вы выполнили модульное тестирование библиотеки классов. Чтобы сделать библиотеку доступной другим пользователям, опубликуйте ее в NuGet в качестве пакета. Чтобы узнать, как это делать, следуйте указаниям в руководстве по NuGet:

    Если библиотека опубликована как пакет NuGet, ее могут устанавливать и использовать другие пользователи. Чтобы узнать, как это делать, следуйте указаниям в руководстве по NuGet:

    Библиотеку не нужно распространять как пакет. Ее можно объединить с консольным приложением, где она используется. Чтобы узнать, как опубликовать консольное приложение, ознакомьтесь с предыдущим руководством в этой серии:

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

    Необходимые компоненты

    • В этом руководстве используется решение, созданное при работе со статьей Создание библиотеки классов .NET в Visual Studio Code.

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

    Модульные тесты обеспечивают автоматическое тестирование программного обеспечения во время разработки и публикации. В этом руководстве используется платформа тестирования MSTest. MSTest — это одна из трех доступных для выбора платформ тестирования. Другими являются xUnit и nUnit.

    1. Запустите Visual Studio Code.
    2. Откройте решение ClassLibraryProjects , созданное при работе со статьей Создание библиотеки классов .NET в Visual Studio Code.
    3. Создайте проект модульного теста с именем StringLibraryTest.

    dotnet new mstest -f net6.0 -o StringLibraryTest 

    Команда -f net6.0 изменяет целевую платформу по умолчанию на net6.0 версию. Команда -o или —output задает расположение для размещения созданных выходных данных. Шаблон проекта создает файл UnitTest1.cs со следующим кодом:

    using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest < [TestClass] public class UnitTest1 < [TestMethod] public void TestMethod1() < >> > 
    • Он импортирует пространство имен Microsoft.VisualStudio.TestTools.UnitTesting, которое содержит типы, используемые для модульного тестирования.
    • Он применяет атрибут TestClassAttribute к классу UnitTest1 .
    • Он применяет атрибут TestMethodAttribute для определения TestMethod1 .

    При вызове модульного теста автоматически выполняются все методы теста, помеченные атрибутом [TestMethod], в тестовом классе, помеченном атрибутом [TestClass].

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj 

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

    Чтобы тестовый проект работал с классом StringLibrary , добавьте в проект StringLibraryTest ссылку на проект StringLibrary .

      Выполните следующую команду:

    dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj 

    Добавление и выполнение методов модульного теста

    При вызове модульного теста 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.

    Так как метод библиотеки обрабатывает строки, необходимо также убедиться, что он обрабатывает пустую строку ( String.Empty ), а также строку null . Пустая строка не содержит символов, а ее свойство Length равно 0. Строка null является неинициализированной строкой. Метод StartsWithUpper можно вызвать напрямую как статический метод и передать ему один аргумент типа String. Или метод StartsWithUpper можно вызвать как метод расширения для переменной string , которой назначено значение null .

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

    Создание методов теста:

      Откройте файл StringLibraryTest/UnitTest1.cs и замените все его содержимое следующим кодом:

    using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest; [TestClass] public class UnitTest1 < [TestMethod] public void TestStartsWithUpper() < // Tests that we expect to return true. string[] words = < "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва" >; foreach (var word in words) < bool result = word.StartsWithUpper(); Assert.IsTrue(result, string.Format("Expected for '': true; Actual: ", word, result)); > > [TestMethod] public void TestDoesNotStartWithUpper() < // Tests that we expect to return false. string[] words = < "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " >; foreach (var word in words) < bool result = word.StartsWithUpper(); Assert.IsFalse(result, string.Format("Expected for '': false; Actual: ", word, result)); > > [TestMethod] public void DirectCallWithNullOrEmpty() < // Tests that we expect to return false. string?[] words = < string.Empty, null >; foreach (var word in words) < bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, string.Format("Expected for '': false; Actual: ", word == null ? "" : word, result)); > > > 
    dotnet test StringLibraryTest/StringLibraryTest.csproj 

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

    Starting test execution, please wait. A total of 1 test files matched the specified pattern. Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net6.0) 

    Обработка сбоев теста

    Выполняя разработку на основе тестирования (TDD), вы сначала пишете тесты, и они завершаются сбоем при первом запуске. Затем вы добавляете код в приложение, и тест успешно выполняется. В рамках этого учебника вы создали тест после написания кода приложения для его проверки, поэтому тест был пройден. Чтобы проверить, завершается ли тест ошибкой, как и ожидается, добавьте недопустимое значение во входные данные теста.

      Измените массив words в методе TestDoesNotStartWithUpper , включив в него строку «Error».

    string[] words = < "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " >; 
    dotnet test StringLibraryTest/StringLibraryTest.csproj 

    Выходные данные терминала показывают, что один тест завершается ошибкой, и он предоставляет сообщение об ошибке для неудачного теста: «Assert.IsFalse не удалось. Expected for ‘Error’: false; actual: True». Из-за этого сбоя строки в массиве, расположенные после слова «Error», не проверялись.

    Starting test execution, please wait. A total of 1 test files matched the specified pattern. Failed TestDoesNotStartWithUpper [28 ms] Error Message: Assert.IsFalse failed. Expected for 'Error': false; Actual: True Stack Trace: at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33 Failed! - Failed: 1, Passed: 2, Skipped: 0, Total: 3, Duration: 31 ms - StringLibraryTest.dll (net5.0) 

    Тестирование версии выпуска для библиотеки

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

      Запустите тесты с конфигурацией сборки «Выпуск».

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release 

    Отладка тестов

    Если в качестве IDE вы используете Visual Studio Code, то можете следовать инструкциям из руководства по отладке консольного приложения .NET с помощью Visual Studio Code, чтобы выполнить отладку кода с применением проекта модульного теста. Вместо запуска проекта приложения ShowCase откройте StringLibraryTest/UnitTest1.cs и выберите Debug All Tests (Выполнить отладку всех тестов) между строками 7 и 8. Если вы не можете найти его, нажмите клавиши CTRL + SHIFT + P , чтобы открыть палитру команд, и введите команду перезагрузки окна.

    Visual Studio Code запускает тестовый проект с присоединенным отладчиком. Выполнение будет прервано в любой точке останова, добавленной в тестовый проект или базовый код библиотеки.

    Дополнительные ресурсы

    Следующие шаги

    В этом руководстве вы выполнили модульное тестирование библиотеки классов. Чтобы сделать библиотеку доступной другим пользователям, опубликуйте ее в NuGet в качестве пакета. Чтобы узнать, как это делать, следуйте указаниям в руководстве по NuGet:

    Если библиотека опубликована как пакет NuGet, ее могут устанавливать и использовать другие пользователи. Чтобы узнать, как это делать, следуйте указаниям в руководстве по NuGet:

    Библиотеку не нужно распространять как пакет. Ее можно объединить с консольным приложением, где она используется. Чтобы узнать, как опубликовать консольное приложение, ознакомьтесь с предыдущим руководством в этой серии:

    Совместная работа с нами на GitHub

    Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

    The .NET documentation is open source. Provide feedback here.

    Обратная связь

    Отправить и просмотреть отзыв по

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *