Пошаговое руководство. Создание и запуск модульных тестов для управляемого кода
Область применения:Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
В этой статье приводится подробное описание процесса создания, запуска и настройки набора модульных тестов с помощью платформы модульных тестов Майкрософт для управляемого кода и обозревателя тестов Visual Studio. В руководстве производится создание проекта C#, находящегося в стадии разработки, создание тестов для проверки его кода, запуск тестов и изучение результатов. После этого производится изменение кода проекта и повторный запуск тестов. Если вы хотите получить концептуальный обзор этих задач перед выполнением этих шагов, см. Основы модульного тестирования.
Создайте проект для тестирования
- Откройте Visual Studio.
- На начальном экране выберите Создать проект.
- Найдите и выберите шаблон проекта консольного приложения C# для .NET и нажмите кнопку «Далее«.
Примечание. Если шаблон Консольное приложение отсутствует, его можно установить из окна Создание проекта. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов. После этого в Visual Studio Installer выберите рабочую нагрузку Разработка классических приложений .NET.
Примечание. Если файл Program.cs не откроется в редакторе, дважды щелкните Program.cs в обозревателе решений, чтобы открыть его.
using System; namespace BankAccountNS < /// /// Bank account demo class. /// public class BankAccount < private readonly string m_customerName; private double m_balance; private BankAccount() < >public BankAccount(string customerName, double balance) < m_customerName = customerName; m_balance = balance; >public string CustomerName < get < return m_customerName; >> public double Balance < get < return m_balance; >> public void Debit(double amount) < if (amount >m_balance) < throw new ArgumentOutOfRangeException("amount"); >if (amount < 0) < throw new ArgumentOutOfRangeException("amount"); >m_balance += amount; // intentionally incorrect code > public void Credit(double amount) < if (amount < 0) < throw new ArgumentOutOfRangeException("amount"); >m_balance += amount; > public static void Main() < BankAccount ba = new BankAccount("Mr. Bryan Walton", 11.99); ba.Credit(5.77); ba.Debit(11.22); Console.WriteLine("Current balance is $", ba.Balance); > > >
Теперь у вас есть проект с методами, которые можно протестировать. В этой статье тестирование проводится на примере метода Debit . Метод Debit вызывается, когда денежные средства снимаются со счета.
Создание проекта модульного теста
Совет В обозревателе решений щелкните решение правой кнопкой мыши и выберите пункты Добавить>Создать проект.
Примечание. в Visual Studio 2019 версии 16.9 шаблон проекта MSTest имеет формат проекта модульного теста.
Создание тестового класса
Создание тестового класса, чтобы проверить класс BankAccount . Можно использовать UnitTest1.cs, созданный в шаблоне проекта, но лучше дать файлу и классу более описательные имена.
Переименуйте файл и класс
- Чтобы переименовать файл, в обозревателе решений выберите файл UnitTest1.cs в проекте BankTests. В контекстном меню выберите команду Переименовать (или нажмите клавишу F2), а затем переименуйте файл в BankAccountTests.cs.
- Чтобы переименовать класс, поместите курсор в UnitTest1 в редакторе кода, щелкните правой кнопкой мыши и выберите команду Переименовать (или нажмите клавиши F2). Введите название BankAccountTests и нажмите клавишу ВВОД.
Файл BankAccountTests.cs теперь содержит следующий код:
// The 'using' statement for Test Tools is in GlobalUsings.cs // using Microsoft.VisualStudio.TestTools.UnitTesting; namespace BankTests < [TestClass] public class BankAccountTests < [TestMethod] public void TestMethod1() < >> >
Добавьте оператор using
Можно также добавить оператор using в класс, чтобы тестируемый проект можно было вызывать без использования полных имен. Вверху файла класса добавьте:
using BankAccountNS;
Требования к тестовому классу
Минимальные требования к тестовому классу следующие:
- Атрибут [TestClass] является обязательным в любом классе, содержащем методы модульных тестов, которые необходимо выполнить в обозревателе тестов.
- Каждый метод теста, предназначенный для запуска в обозревателе тестов, должен иметь атрибут [TestMethod] .
Можно иметь другие классы в проекте модульного теста, которые не содержат атрибута [TestClass] , а также иметь другие методы в тестовых классах, у которых атрибут — [TestMethod] . Можно вызывать эти другие классы и методы в методах теста.
Создание первого тестового метода
В этой процедуре необходимо написать методы модульного теста, чтобы проверить поведение Debit метода BankAccount класса.
Существует по крайней мере три поведения, которые требуется проверить:
- Метод создает исключение ArgumentOutOfRangeException , если сумма по дебету превышает баланс.
- Метод создает исключение ArgumentOutOfRangeException, если сумма по дебету меньше нуля.
- Если значение дебета допустимо, то метод вычитает сумму дебета из баланса счета.
Метод по умолчанию TestMethod1 можно удалять, так как он не используется в этом руководстве.
Создание метода теста
Первый тест проверяет, снимается ли со счета нужная сумма при допустимом размере кредита (со значением меньшим, чем баланс счета, и большим, чем ноль). Добавьте следующий метод в этот класс BankAccountTests :
[TestMethod] public void Debit_WithValidAmount_UpdatesBalance() < // Arrange double beginningBalance = 11.99; double debitAmount = 4.55; double expected = 7.44; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // Act account.Debit(debitAmount); // Assert double actual = account.Balance; Assert.AreEqual(expected, actual, 0.001, "Account not debited correctly"); >
Метод очень прост: он создает новый объект BankAccount с начальным балансом, а затем снимает допустимое значение. Он использует метод Assert.AreEqual, чтобы проверить, что конечный баланс соответствует ожидаемому. Такие методы, как Assert.AreEqual , Assert.IsTrue и другие, зачастую используются в модульном тестировании. Дополнительную концептуальную информацию о написании модульного теста см. в разделе Написание тестов.
Требования к методу теста
Метод теста должен удовлетворять следующим требованиям:
- Он декорируется атрибутом [TestMethod] .
- Он возвращает void .
- Он не должен иметь параметров.
Сборка и запуск теста
- В меню Сборка нажмите Построить решение (или нажмите клавиши CTRL + SHIFT + B).
- Если тест Обозреватель не открыт, откройте его, выбрав> тестовый тест Обозреватель (или тестовый>тест Windows> Test Обозреватель) в верхней строке меню (или нажмите клавиши CTRL + E, T).
- Выберите Запустить все, чтобы выполнить тест (или нажмите клавиши CTRL + R, V). Во время выполнения теста в верхней части окна Обозреватель тестов отображается анимированная строка состояния. По завершении тестового запуска строка состояния становится зеленой, если все методы теста успешно пройдены, или красной, если какие-либо из тестов не пройдены. В данном случае тест пройден не будет.
- Выберите этот метод в обозревателе тестов для просмотра сведений в нижней части окна.
Исправление кода и повторный запуск тестов
Результат теста содержит сообщение, описывающее возникшую ошибку. Чтобы увидеть это сообщение, может потребоваться выполнить детализацию. Для метода AreEqual выводится сообщение о том, что ожидалось и что было фактически получено. Ожидалось, что баланс уменьшится, а вместо этого он увеличился на сумму списания.
Модульный тест обнаружил ошибку: сумма списания добавляется на баланс счета, вместо того чтобы вычитаться.
Исправление ошибки
Чтобы исправить эту ошибку, в файле BankAccount.cs замените строку:
m_balance += amount;
m_balance -= amount;
Повторный запуск теста
В обозревателе тестов выберите Запустить все, чтобы запустить тест повторно (или нажмите клавиши CTRL + R, V). Красно-зеленая строка становится зеленой, чтобы указать, что тест был пройден.


Использование модульных тестов для улучшения кода
В этом разделе рассматривается, как последовательный процесс анализа, разработки модульных тестов и рефакторинга может помочь сделать рабочий код более надежным и эффективным.
Анализ проблем
Мы создали тестовый метод для подтверждения того, что допустимая сумма правильно вычитается в методе Debit . Теперь проверим, что метод создает исключение ArgumentOutOfRangeException, если сумма по дебету:
- больше баланса или
- меньше нуля.
Создание и запуск новых методов теста
Создадим метод теста для проверки правильного поведения в случае, когда сумма по дебету меньше нуля:
[TestMethod] public void Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange() < // Arrange double beginningBalance = 11.99; double debitAmount = -100.00; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // Act and assert Assert.ThrowsException(() => account.Debit(debitAmount)); >
Мы используем метод ThrowsException для подтверждения правильности созданного исключения. Этот метод приводит к тому, что тест не будет пройден, если не возникнет исключения ArgumentOutOfRangeException. Если временно изменить тестируемый метод для вызова более общего исключения ApplicationException при значении суммы по дебету меньше нуля, то тест работает правильно, т. е. завершается сбоем.
Чтобы проверить случай, когда размер списания превышает баланс, выполните следующие действия:
- Создать новый метод теста с именем Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange .
- Скопировать тело метода из Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange в новый метод.
- Присвоить debitAmount значение, превышающее баланс.
Выполните два теста и убедитесь, что они пройдены.
Продолжение анализа
Еще раз проанализировав тестируемый метод BankAccount.Debit , можно заметить, что оба условных оператора используют конструктор ArgumentOutOfRangeException , который просто получает имя аргумента в качестве параметра:
throw new ArgumentOutOfRangeException("amount");
Существует конструктор, который можно использовать, чтобы отчеты гораздо более подробные сведения: ArgumentOutOfRangeException(String, Object, String) включает имя аргумента, значение аргумента и определяемое пользователем сообщение. Мы можем выполнить рефакторинг тестируемого метода для использования данного конструктора. Более того, можно использовать открытые для общего доступа члены типа для указания ошибок.
Рефакторинг тестируемого кода
Сначала определим две константы для сообщений об ошибках в области видимости класса. Поместите определения в тестируемый класс: BankAccount
public const string DebitAmountExceedsBalanceMessage = "Debit amount exceeds balance"; public const string DebitAmountLessThanZeroMessage = "Debit amount is less than zero";
Затем изменим два условных оператора в методе Debit :
if (amount > m_balance) < throw new System.ArgumentOutOfRangeException("amount", amount, DebitAmountExceedsBalanceMessage); >if (amount
Рефакторинг тестовых методов
Выполните рефакторинг методов теста, удалив вызов Assert.ThrowsException. Заключите вызов Debit() в блок try/catch , перехватите конкретное ожидаемое исключение и проверьте соответствующее ему сообщение. Метод Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.Contains обеспечивает возможность сравнения двух строк.
В этом случае метод Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange может выглядеть следующим образом:
[TestMethod] public void Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange() < // Arrange double beginningBalance = 11.99; double debitAmount = 20.0; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // Act try < account.Debit(debitAmount); >catch (System.ArgumentOutOfRangeException e) < // Assert StringAssert.Contains(e.Message, BankAccount.DebitAmountExceedsBalanceMessage); >>
Повторное тестирование, переписывание и анализ
Метод теста сейчас обрабатывает не все требуемые случаи. Если тестируемый метод Debit не смог выдать исключение ArgumentOutOfRangeException, когда значение debitAmount было больше остатка (или меньше нуля), метод теста выдает успешное прохождение. Этот сценарий не подходит, так как требуется, чтобы метод теста не завершился ошибкой, если исключение не возникает.
Этот результат является ошибкой в методе тестирования. Для решения этой проблемы добавим утверждение Assert.Fail в конце тестового метода для обработки случая, когда исключение не создается.
Однако повторный запуск теста показывает, что тест теперь оказывается непройденным при перехватывании верного исключения. Блок catch перехватывает исключение, но метод продолжает выполняться, и в нем происходит сбой на новом утверждении Assert.Fail. Чтобы разрешить эту проблему, добавим оператор return после StringAssert в блоке catch . Повторный запуск теста подтверждает, что проблема устранена. Окончательная версия метода Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange выглядит следующим образом:
[TestMethod] public void Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange() < // Arrange double beginningBalance = 11.99; double debitAmount = 20.0; BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance); // Act try < account.Debit(debitAmount); >catch (System.ArgumentOutOfRangeException e) < // Assert StringAssert.Contains(e.Message, BankAccount.DebitAmountExceedsBalanceMessage); return; >Assert.Fail("The expected exception was not thrown."); >
Заключение
Усовершенствования тестового кода привели к созданию более надежных и информативных методов теста. Но что более важно, в результате был также улучшен тестируемый код.
В этом пошаговом руководстве используется платформа модульных тестов Microsoft для управляемого кода. Обозреватель тестов также может запускать тесты c платформ модульных тестов стороннего производителя, которые имеют адаптеры для обозревателя тестов. Дополнительные сведения см. в разделе Установка платформ модульного тестирования сторонних поставщиков.
См. также
Сведения о запуске тестов из командной строки см. в разделе Параметры командной строки VSTest.Console.exe.
Вопросы и ответы об обозревателе тестов Visual Studio
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Обнаружение динамических тестов
Обозреватель тестов не обнаруживает тесты, определенные динамически. (Например, теории, пользовательские адаптеры, пользовательские признаки, #ifdef и т. д.) Как сделать, чтобы они обнаруживались?
Выполните сборку проекта, чтобы запустить обнаружение на основе сборок.
Обнаружение тестов в реальном времени основано на источнике. Оно не способно обнаружить тесты, которые используют теории, пользовательские адаптеры, пользовательские признаки, операторы #ifdef и т. п., так как они определяются во время выполнения. Чтобы правильно распознать такие тесты, нужно выполнить сборку. В Visual Studio 2017 15.6 и более поздних версий обнаружение на основе сборок (традиционный метод) выполняется только после сборки. Это означает, что обнаружение тестов в реальном времени определяет максимально возможное количество тестов в процессе редактирования, а после сборки к ним добавляются динамически определяемые тесты благодаря обнаружению на основе сборок. Обнаружение тестов в реальном времени повышает скорость реакции системы, но сохраняет возможность получить полные и точные результаты после сборки.
Обозреватель тестов, символ плюса (+)
Что означает символ «+» (плюс) в верхней строке обозревателя тестов?
Символ «+» (плюс) означает, что после сборки и выполнения обнаружения на основе сборок могут быть обнаружены дополнительные тесты. Этот символ отображается, если в проекте обнаружены динамически определяемые тесты.

Обнаружение тестов в режиме реального времени
Теперь тесты появляются в обозревателе тестов сразу при вводе кода, не дожидаясь сборки. Что изменилось?
Эта возможность называется Обнаружение тестов в реальном времени. На основе анализатора Roslyn она обнаруживает тесты и переносит данные о них в обозреватель тестов прямо в режиме реального времени, еще до сборки проекта. Дополнительные сведения об алгоритме обнаружения для динамически определяемых тестов, например с использованием теорий или пользовательских признаков, см. в разделе Обнаружение динамических тестов.
Совместимость с обнаружением тестов в реальном времени
Какие языки и платформы тестирования поддерживают обнаружение тестов в реальном времени?
Обнаружение тестов в реальном времени работает только для управляемых языков (C# и Visual Basic), так как оно создано на основе компилятора Roslyn. На данном этапе обнаружение тестов в реальном времени работает только для платформ MSTest, NUnit и xUnit.
Журналы обозревателя тестов
Как можно включить журналы для обозревателя тестов?
Откройте Сервис>Параметры>Тест и найдите раздел «Ведение журнала».
Обнаружение тестов UWP
Почему мои тесты в проектах UWP не обнаруживаются без развертывания приложения?
Тесты UWP ориентируются на другую среду выполнения при развертывании приложения. Это означает, что для точного обнаружения тестов для проектов UWP нужно не только собрать, но и развернуть проект.
Сортировка в обозревателе тестов
Как работает сортировка результатов тестирования в иерархическом представлении?
Иерархическое представление сортирует тесты по алфавиту, а не по результату. Предыдущие параметры группирования сортировали результаты тестов по результату, а затем по алфавиту. Вы по-прежнему можете включить сортировку по результату, щелкнув правой кнопкой мыши заголовок столбца в обозревателе тестов, включив столбец «Состояние», а затем щелкнув заголовок столбца «Состояние», чтобы применить сортировку по этому столбцу. Вы можете оставить отзыв о такой схеме сортировки в этом вопросе в GitHub.
Иерархическое представление в обозревателе тестов
В иерархическом представлении возле группирований родительских узлов есть значки пройденных, непройденных, пропущенных и невыполненных тестов. Что означают эти значки?
Значки возле группирований проектов, пространств имен и классов указывают на состояние тестов в определенном группировании. См. следующую таблицу.
![]()
Поиск по пути к файлу
В поле поиска обозревателя тестов исчез фильтр «Путь к файлу».
Фильтр «Путь к файлу» в поле поиска обозревателя тестов удален в Visual Studio 2017 версии 15.7. Эта функция используется мало. Чтобы обозреватель тестов получал методы теста быстрее, ее можно исключить. Если это изменение прерывает ваш поток разработки, сообщите нам, отправив отзыв в сообщество разработчиков.
Удаление недокументированных интерфейсов
Некоторые интерфейсы API, относящиеся к тесту, отсутствуют в Visual Studio 2019. Что изменилось?
В Visual Studio 2019 будут удалены некоторые API окон тестов, которые были ранее помечены как общедоступные, но никогда не были официально задокументированы. Они были помечены как «нерекомендуемые» в Visual Studio 2017, чтобы заранее предупредить группы обслуживания расширений. Насколько нам известно, с этими API-интерфейсами работала и была связана лишь незначительная часть расширений. К ним относятся IGroupByProvider , IGroupByProvider , KeyComparer , ISearchFilter , ISearchFilterToken , ISearchToken и SearchFilterTokenType . Если это изменение влияет на ваше расширение, сообщите нам, отправив сведения об ошибке в сообщество разработчиков.
Ссылка NuGet для адаптера теста
В Visual Studio 2017 версии 15.8 тесты обнаруживаются, но не выполняются.
Все тестовые проекты должны содержать ссылку NuGet на адаптер тестов .NET в файле с расширением .csproj. Если такая ссылка отсутствует, в проекте появляется следующая информация о тесте, если после сборки выполняется поиск через расширение адаптера тестов или если пользователь пытается запустить выбранные тесты:
Тестовый проект <> не ссылается на адаптер NuGet .NET. Обнаружение или выполнение тестов для этого проекта могут не работать. Мы рекомендуем включать ссылку на адаптеры тестов NuGet. в каждый проект теста .NET в решении.
Вместо расширений адаптеров тестов проекты должны использовать пакеты NuGet для адаптеров тестов. Это требование значительно повышает производительность и снижает проблемы с непрерывной интеграцией. Дополнительные сведения о прекращении поддержки расширения адаптера теста .NET можно найти в заметках о выпуске.
UWP TestContainer не найден
Мои тесты UWP больше не выполняются в Visual Studio 2017 версии 15.7 и более поздних версий.
Последние тестовые проекты UWP указывают свойство сборки платформы тестирования, что позволяет повысить производительность при обнаружении тестовых приложений. Если у вас есть тестовый проект UWP, который был инициализирован в версии Visual Studio ниже 15.7, в разделе Вывод>Тесты вы можете увидеть следующую ошибку.
System.AggregateException: возникла одна или несколько ошибок. —> System.InvalidOperationException: не удалось найти следующий объект TestContainer <> в Microsoft.VisualStudio.TestWindow.Controller.TestContainerProvider d__61.MoveNext()
Чтобы исправить эту проблему, сделайте следующее:
- Обновите свойство сборки тестового проекта, используя следующий код.
$(VisualStudioVersion)
- Обновите версию пакета SDK TestPlatform, используя следующий код.
Использование предварительных версий функций
В Visual Studio 2019 включить предварительные версии функции в разделе Инструменты > Параметры > Среда > Предварительные версии функций.
См. также
- Microsoft.VisualStudio.TestTools.UnitTesting
- Создание и запуск модульных тестов для существующего кода
- Модульное тестирование кода
- Функция Live Unit Testing: вопросы и ответы
Учебник. Создание приложения Node.js и React в Visual Studio
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
В Visual Studio можно легко создать проект Node.js, а также использовать IntelliSense и другие встроенные функции, поддерживающие Node.js. При работе с этим руководством вы создадите проект веб-приложения Node.js на основе шаблона Visual Studio. Затем вы создадите простое приложение с помощью React.
В этом руководстве описано следующее:
- Создание проекта Node.js
- Добавление пакетов npm
- Добавление кода React в приложение
- Транскомпиляция JSX
- Подключение отладчика
Начиная с Visual Studio 2022, можно также создать проект React с помощью рекомендуемого типа проекта на основе CLI. Некоторые сведения в этой статье относятся только к типу проектов Node.js (расширение файла NJSPROJ).
Прежде чем приступить к работе, изучите краткий список вопросов и ответов, который познакомит вас с некоторыми основными понятиями.
- Что такое Node.js? Node.js — это серверная среда выполнения JavaScript, выполняющая код JavaScript.
- Что такое npm? npm —это стандартный диспетчер пакетов Node.js. Диспетчер пакетов упрощает публикацию и совместное использование библиотек исходного кода Node.js. Диспетчер пакетов npm упрощает установку, обновление и удаление библиотек.
- Что такое React? React — это интерфейсная платформа для создания пользовательского интерфейса.
- Что такое JSX? JSX — это расширение синтаксиса JavaScript. Обычно оно используется с React для описания элементов пользовательского интерфейса. Прежде чем запускать код JSX в браузере, его нужно преобразовать в обычный код JavaScript.
- Что такое webpack? Пакет webpack объединяет файлы JavaScript, чтобы они могли работать в браузере, а также может преобразовывать или упаковывать другие ресурсы. Webpack может указать компилятору, например Babel или TypeScript, преобразовать код JSX или TypeScript в обычный код JavaScript.
Необходимые компоненты
Для работы с этим руководством требуется следующее:

- Visual Studio с установленной рабочей нагрузкой «Разработка Node.js». Если вы еще не установили Visual Studio:
- Перейдите на страницу загрузки Visual Studio, чтобы установить Visual Studio бесплатно.
- В Visual Studio Installer выберите рабочую нагрузку Разработка Node.js и щелкните Установить.
Если решение Visual Studio уже установлено, но требуется установить рабочую нагрузку Node.js, сделайте следующее:
- В Visual Studio выберите Средства>Получить средства и компоненты.
- В Visual Studio Installer выберите рабочую нагрузку Разработка Node.js и щелкните Изменить, чтобы скачать и установить рабочую нагрузку.
- После создания проекта щелкните правой кнопкой мыши узел проекта и выберите Панель свойств.
- На панели Свойства задайте путь Node.exe для ссылки на глобальную или локальную установку Node.js. Вы можете указать путь к локальному интерпретатору в каждом из своих проектов Node.js.
Это руководство было протестировано с помощью Node.js 18.5.0.
Это руководство было протестировано с Node.js 12.6.2.
Создание проекта
Прежде всего, создайте проект веб-приложения Node.js.

- Откройте Visual Studio и нажмите клавишу ESC, чтобы закрыть начальное окно.
- Нажмите клавиши CTRL+Q, введите node.js в поле поиска, а затем выберите в раскрывающемся списке элемент Blank Node.js Web Application — JavaScript (Пустое веб-приложение Node.js — JavaScript). Хотя в этом руководстве используется компилятор TypeScript, выполнение приведенных в нем инструкций необходимо начинать с шаблона JavaScript. Если параметр Пустое веб-приложение Node.js не отображается, нужно установить рабочую нагрузку «Разработка Node.js». Соответствующие инструкции см. в разделе Предварительные требования.
- В диалоговом окне Настроить новый проект выберите команду Создать. Visual Studio создаст новое решение и откроет проект в области справа. Файл проекта server.js откроется в области редактора слева.
- Структуру проекта можно изучить в Обозревателе решений в области справа.
- На верхнем уровне находится решение (1), имя которого по умолчанию совпадает с именем проекта. Решение, представленное на диске файлом SLN, является контейнером для одного или нескольких связанных проектов.
- Ваш проект (2) с именем, которое вы указали в диалоговом окне Настроить новый проект, выделен полужирным шрифтом. В файловой системе этот проект представляет собой файл .njsproj в папке вашего проекта. Чтобы просмотреть и задать свойства проекта и переменные среды, нажмите клавиши ALT+ВВОД или щелкните проект правой кнопкой мыши и в контекстном меню выберите пункт Свойства. Вы можете использовать и другие средства разработки, так как файл проекта не вносит изменений в источник проекта Node.js.
- В узле npm (3) представлены все установленные пакеты npm. Чтобы найти и установить пакеты npm, щелкните правой кнопкой мыши узел npm. Вы можете установить и обновить пакеты с помощью параметров в package.json, или щелкнув узел npm правой кнопкой мыши.
- Npm использует файл package.json (4) для управления зависимостями и версиями для локально установленных пакетов. Дополнительные сведения см. в разделе Управление пакетами npm.
- Файлы проекта (5) отображаются в узле проекта. Файл запуска проекта server.js выделяется полужирным шрифтом. Задать файл запуска можно, щелкнув правой кнопкой мыши файл в проекте и выбрав Задать как файл запуска Node.js.

- Откройте Visual Studio.
- Создание проекта Нажмите клавишу ESC, чтобы закрыть окно запуска. Нажмите CTRL+Q, чтобы открыть поле поиска, введите Node.js и выберите Пустое веб-приложение Node.js (JavaScript). (Хотя в этом учебнике используется компилятор TypeScript, в шагах указано, что нужно начинать с шаблона JavaScript.) В появившемся диалоговом окне выберите Создать. Если шаблон проекта Пустое веб-приложение Node.js отсутствует, необходимо добавить рабочую нагрузку Разработка Node.js. Подробные инструкции см. в разделе с предварительными требованиями. Visual Studio создаст решение и откроет проект. (1) Полужирным шрифтом выделен ваш проект, имя которого вы указали в окне Новый проект. В файловой системе этот проект представлен файлом NJSPROJ в папке проекта. Вы можете задать свойства и переменные среды, связанные с проектом, щелкнув его правой кнопкой мыши и выбрав пункт Свойства (или нажав сочетание клавиш ALT + ВВОД). Вы можете одновременно использовать и другие средства разработки, так как файл проекта не вносит изменения в источник проекта Node.js. (2) На верхнем уровне находится решение, имя которого по умолчанию совпадает с именем проекта. Решение, представленное на диске файлом SLN, является контейнером для одного или нескольких связанных проектов. (3) В узле npm представлены все установленные пакеты npm. Вы можете щелкнуть узел npm правой кнопкой мыши, чтобы найти и установить пакеты npm с помощью диалогового окна. Кроме того, установить и обновить пакеты можно с помощью параметров, доступных в файле package.json и контекстном меню узла npm. (4) package.json — это файл, который npm использует для управления зависимостями и версиями пакетов для локально установленных пакетов. Дополнительные сведения см. в разделе Управление пакетами npm. (5) Файлы проекта, такие как server.js, отображаются в узле проекта. server.js — это файл запуска проекта, поэтому он выделяется полужирным шрифтом. Задать файл запуска можно, щелкнув правой кнопкой мыши файл в проекте и выбрав Задать как файл запуска Node.js.
Добавление пакетов npm
Для правильной работы этого приложения требуются следующие модули npm:
- react
- react-dom
- express
- path
- ts-loader
- typescript
- webpack
- webpack-cli
- В Обозревателе решений щелкните правой кнопкой мыши узел npm и выберите элемент Установка новых пакетов npm.
- В диалоговом окне Установка новых пакетов npm выполните поиск пакета react и щелкните команду Установить пакет.


Вместо поочередного поиска и добавления остальных пакетов в пользовательском интерфейсе вы можете вставить в файл package.json требуемый код пакета.
-
Из Обозревателя решений откройте package.json в редакторе Visual Studio. Добавьте следующий раздел dependencies перед концом файла:
"dependencies": < "express": "^4.18.2", "path": "^0.12.7", "react": "^18.2.0", "react-dom": "^18.2.0", "ts-loader": "^9.4.2", "typescript": "^5.0.2", "webpack": "^5.76.3", "webpack-cli": "^5.0.1" >,


Примечание. Кроме того, пакеты npm можно установить с помощью командной строки. В Обозревателе решений щелкните правой кнопкой мыши имя проекта и выберите пункт Открыть командную строку здесь. Используйте стандартные команды Node.js для установки пакетов.
Добавление файлов проекта
Теперь добавьте в проект четыре новых файла.
Для этого простого приложения новые файлы проекта добавляются в корень проекта. В большинстве приложений файлы добавляются во вложенные папки, после чего ссылки в виде относительных путей соответствующим образом изменяются.
- В Обозревателе решений выберите имя проекта и нажмите клавиши CTRL+SHIFT+A или щелкните правой кнопкой мыши имя проекта и выберите элементы Добавить>Новый элемент. Если вы не видите все шаблоны элементов, выберите «Показать все шаблоны» и выберите шаблон элемента.
- В диалоговом окне Добавление нового элемента выберите JSX-файл TypeScript, введите имя файла app.tsx и нажмите кнопку Добавить или ОК.
- Повторите эти шаги, чтобы добавить файл JavaScript с именем webpack-config.js.
- Повторите эти шаги, чтобы добавить HTML-файл с именем index.html.
- Повторите эти шаги, чтобы добавить файл конфигурации TypeScript JSON с именем tsconfig.json.
Добавление кода приложения
- В Обозревателе решений откройте файл server.js и замените его содержимое следующим кодом:
'use strict'; var path = require('path'); var express = require('express'); var app = express(); var staticPath = path.join(__dirname, '/'); app.use(express.static(staticPath)); // Allows you to set port in the project properties. app.set('port', process.env.PORT || 3000); var server = app.listen(app.get('port'), function() < console.log('listening'); >);
declare var require: any var React = require('react'); var ReactDOM = require('react-dom'); export class Hello extends React.Component < render() < return ( Welcome to React!!
); > > ReactDOM.render(, document.getElementById('root'));
Настройка параметров компилятора webpack и TypeScript
Затем добавьте код конфигурации webpack в файл webpack-config.js. Вы добавляете простую конфигурацию webpack, в которой указываются входной файл (app.tsx) и выходной файл (app-bundle.js) для объединения и транскомпиляции кода JSX в обычный код JavaScript. Для транскомпиляции также настраиваются некоторые параметры компилятора TypeScript. Этот простой пример конфигурации поможет познакомиться с возможностями средства webpack и компилятора TypeScript.
-
В Обозревателе решений откройте файл webpack-config.js и добавьте приведенный ниже код.
module.exports = < devtool: 'source-map', entry: "./app.tsx", mode: "development", output: < filename: "./app-bundle.js" >, resolve: < extensions: ['.Webpack.js', '.web.js', '.ts', '.js', '.jsx', '.tsx'] >, module: < rules: [ < test: /\.tsx$/, exclude: /(node_modules|bower_components)/, use: < loader: 'ts-loader' >> ] > >
< "compilerOptions": < "noImplicitAny": false, "module": "commonjs", "noEmitOnError": true, "removeComments": false, "sourceMap": true, "target": "es5", "jsx": "react" >, "exclude": [ "node_modules" ], "files": [ "app.tsx" ] >
Транскомпиляция JSX

- В Обозревателе решений щелкните правой кнопкой мыши имя проекта и выберите пункт Открыть командную строку здесь.
- В командной строке введите следующую команду webpack: node_modules\.bin\webpack —config webpack-config.js В окне командной строки будут выведены результаты. Если вместо приведенных выше выходных данных будут выведены ошибки, их необходимо будет устранить, чтобы приложение работало. Отличие версий пакетов npm от версий, указанных в этом руководстве, может привести к ошибкам. Чтобы устранить ошибки, попробуйте следующее:
- Используйте точные версии, показанные на предыдущем шаге, если вы еще не сделали Или, если вы по-прежнему видите ошибки:
- Установите последние версии пакетов npm, щелкнув правой кнопкой мыши узел npm в Обозреватель решений и выбрав установить пакеты npm.
Если одна или несколько версий пакетов устарели и приводят к ошибке, может потребоваться установить более последнюю версию для устранения ошибок. Дополнительные сведения об использовании package.json для контроля версий пакетов npm см. в разделе Конфигурация package.json.

Каждый раз при внесении изменений в файл app.tsx необходимо повторно выполнять команду webpack. Чтобы автоматизировать этот шаг, можно добавить скрипт сборки для транскомпиляции JSX.
Добавление скрипта сборки для транскомпиляции JSX
Для версий Visual Studio, начиная с Visual Studio 2019, требуется скрипт сборки. Вместо транскомпиляции JSX в командной строке (как показано в предыдущем разделе) можно транскомпилировать JSX при сборке из Visual Studio.
-
Откройте Package.json и добавьте следующий раздел после раздела dependencies :
"scripts":
Выполнить приложение
- На панели инструментов Отладка выберите целевой объект отладки, например веб-сервер (Microsoft Edge) или веб-сервер (Google Chrome).



Если вы уверены, что нужный вам целевой объект отладки доступен на компьютере, но его нет в списке вариантов, выберите пункт Просмотр с помощью из раскрывающегося списка целей отладки. Выберите в списке целевой браузер, который хотите установить по умолчанию и щелкните элемент По умолчанию.
Установите точку останова и запустите приложение.
Точки останова — это самая основная и важная функция надежной отладки. Точка останова указывает, где решение Visual Studio должно приостановить выполняемый код. Так вы сможете проверить значения переменных или поведение памяти, а также узнать, выполняется ли определенная ветвь кода.
-
В файле server.js щелкните в поле слева от объявления staticPath , чтобы установить точку останова:


Установка и срабатывание точки останова в коде React на стороне клиента
В предыдущем разделе вы подключили отладчик к коду Node.js на стороне сервера. Чтобы использовать точки останова на стороне клиента React, необходимо присоединить отладчик к нужному процессу. Ниже описан один из способов настройки отладки в браузере и подключения к процессу.
Включение отладки в браузере
Можно использовать Microsoft Edge или Google Chrome. Закройте все окна целевого браузера. Для Microsoft Edge также отключите все экземпляры Chrome. Так как оба браузера используют одну базу кода Chromium, лучше всего завершить работу обоих браузеров.
Другие экземпляры браузера могут препятствовать его открытию при включенной отладке. Расширения браузера могут препятствовать режиму полной отладки. Для поиска и завершения работы всех работающих экземпляров Chrome может потребоваться диспетчер задач.
Запустите браузер с включенной отладкой.

- В раскрывающемся списке на панели инструментов Отладка выберите элемент Просмотр с помощью.
- На экране Просмотр с помощью выберите нужный браузер и нажмите Добавить.
- В поле Аргументы введите —remote-debugging-port=9222.
- Присвойте браузеру новое понятное имя, например Edge с отладкой или Chrome с отладкой, а затем нажмите кнопку ОК.
- На экране Просмотр с помощью выберите элемент Просмотр.
- Кроме того, вы можете открыть интерфейс Выполнить, щелкнув левой кнопкой мыши кнопку Пуск в среде Windows, и ввести следующий текст: msedge —remote-debugging-port=9222 or chrome.exe —remote-debugging-port=9222
Откроется окно браузера с включенной отладкой. Так как приложение еще не запущено, страница браузера пуста.
Подключение отладчика к сценарию на стороне клиента
- В редакторе Visual Studio задайте точку останова в исходном коде app-bundle.js или app.tsx.
- Для app-bundle.js задайте точку останова в функции render() . Чтобы найти функцию render() в файле app-bundle.js, нажмите клавиши CTRL+F или выберите элементы Правка>Найти и заменить>Быстрый поиск и введите render в поле поиска.




Если вы задаете точку останова в app.tsx, обновите webpack-config.js, чтобы заменить приведенный ниже код. После этого сохраните изменения. Замените этот код:
output: < filename: "./app-bundle.js", >,
Вставьте следующий код:
output: < filename: "./app-bundle.js", devtoolModuleFilenameTemplate: '[resource-path]' // removes the webpack:/// prefix >,
Совет После первого подключения можно быстро подключаться к этому же процессу, выбрав элементы Отладка>Повторно подключиться к процессу или нажав клавиши SHIFT+ALT+P.

Совет Если отладчик не присоединяется и вы видите сообщение Unable to attach to the process. An operation is not legal in the current state (Не удалось подключиться к процессу. Операция недопустима в текущем состоянии) с помощью диспетчера задач закройте все экземпляры целевого браузера перед запуском браузера в режиме отладки. Возможно, в браузере выполняются расширения, которые препятствуют переходу в режим полной отладки.
- Если вам не удается попасть в точку останова в файле app.tsx, повторите процесс с операцией Подключиться к процессу, которая подключает отладчик, как описано в предыдущих шагах. Убедитесь, что ваша среда настроена правильно:
- Закройте все экземпляры браузера, включая расширения Chrome, с помощью диспетчера задач. Обязательно запустите браузер в режиме отладки.
- Убедитесь, что сопоставитель с исходным кодом содержит ссылку на ./app.tsx, а не webpack:///./app.tsx, что не позволяет отладчику Visual Studio найти app.tsx.
Кроме того, можно использовать инструкцию debugger; в файле app.tsx или задать точки останова в средствах для разработчиков (Chrome) или в средствах F12 (Microsoft Edge).
Основные сведения о модульных тестах
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code 
Убедитесь, что код работает, как ожидалось, создав и выполнив модульные тесты. Модульное тестирование получило такое название, так как функции программы разбиваются на отдельные тестируемые участки поведения, которые можно протестировать в качестве отдельных модулей. Обозреватель тестов Visual Studio предоставляет гибкий и эффективный способ запуска модульных тестов и просмотра результатов в Visual Studio. Visual Studio устанавливает платформы модульного тестирования Microsoft для управляемого и машинного кода. Платформа модульного тестирования используется для создания модульных тестов, их запуска и создания отчетов о результатах таких тестов. Завершив внесение изменений, запустите модульные тесты повторно, чтобы убедиться, что код по-прежнему работает правильно. Visual Studio Enterprise может выполнять эту задачу автоматически с помощью функции Live Unit Testing, которая определяет тесты, затронутые вносимыми в код изменениями, и выполняет их в фоновом режиме в процессе ввода.
Модульное тестирование максимально влияет на качество кода, когда оно является неотъемлемой частью рабочего процесса разработки ПО. После написания функции или другого блока кода приложения создаются модульные тесты, которые проверяют поведение кода в ответ на стандартные, граничные и некорректные случаи ввода данных; также проверяются любые явные или предполагаемые допущения, сделанные кодом. При разработке, управляемой тестами, модульные тесты создаются перед написанием кода, поэтому модульные тесты используются в качестве технической документации и спецификации функциональности.
Обозреватель тестов также может запускать тесты c платформ модульных тестов стороннего производителя и платформ на основе открытого кода, имеющих дополнительные интерфейсы для Обозревателя тестов. Многие из этих платформ могут быть добавлены при помощи Менеджера расширений Visual Studio и Галереи Visual Studio. Дополнительные сведения см. в разделе Установка платформ модульного тестирования сторонних поставщиков.
Можно быстро создавать тестовые проекты и методы теста из кода или создавать тесты вручную при необходимости. При использовании компонента IntelliTest для изучения кода .NET можно создавать тестовые данные и наборы модульных тестов. Для каждого оператора в коде создаются входные данные теста, которые будут выполнять этот оператор. Узнайте, как создавать модульные тесты для кода .NET.
Начало работы
Для получения информации по введению в модульное тестирование, которое знакомит вас сразу с созданием кода, см. один из следующих разделов.
- Пошаговое руководство. Создание и запуск модульных тестов для кода .NET
- Пошаговое руководство. Разработка на основе тестов с помощью тестовой Обозреватель
- Написание модульных тестов для C/C++ в Visual Studio
Пример решения Bank
В этой статье в качестве примера используется разработка ненастоящего приложения, которое называется MyBank . Чтобы следовать разъяснениям в данном разделе, действительного кодирования не потребуется. Методы тестирования написаны на C# и представлены при помощи платформы модульного тестирования Microsoft для управляемого кода. Но эти принципы применимы и к другим языкам и платформам.


Первая попытка проектирования приложения MyBank включает в себя компонент счетов, который представляет собой лицевой счет и его транзакции с банком, а также компонент базы данных, который включает в себя функции объединения лицевых счетов и управления ими.
Создается решение Bank , которое содержит два проекта.
Первая попытка создания проекта Accounts содержит класс для хранения базовой информации о счете, интерфейс, который определяет функции счета любого типа, например, для внесения и снятия средств со счета и класс, производный от интерфейса, который представляет собой текущий счет. Проект Счета начинается с создания следующих исходных файлов:
- AccountInfo.cs, который определяет основную информацию о счете;
- IAccount.cs, определяющего стандартный интерфейс IAccount для счета, включая методы внесения и снятия средств со счета и получения баланса счета;
- CheckingAccount.cs, содержащего класс CheckingAccount , который реализует интерфейс IAccount для чекового счета.
Из опыта известно, что при снятии средств с текущего счета необходимо убедиться, что количество снимаемых средств меньше, чем размер баланса счета. Поэтому метод IAccount.Withdraw в CheckingAccount перекрывается методом, который проверяет данное условие. Метод может выглядеть следующим образом.
public void Withdraw(double amount) < if(m_balance >= amount) < m_balance -= amount; >else < throw new ArgumentException(nameof(amount), "Withdrawal exceeds balance!"); >>Теперь, когда есть немного кода, можно провести тестирование.
Создание проектов модульных тестов и методов тестирования (C#)
Для C# как правило, проще создать проект модульного теста и заглушки модульных тестов из кода. Кроме того, можно создать проект модульных тестов и тесты вручную в зависимости от потребностей. Если вы хотите создать модульные тесты из кода с 3-й сторонней платформой, вам потребуется один из этих расширений: NUnit или xUnit. Если вы не используете C#, пропустите этот раздел и перейдите к разделу Создание проекта и модульных тестов вручную.
Создание проекта модульного теста и заглушек модульных тестов
- В окне редактора кода выберите в контекстном меню команду Создать модульные тесты.

Примечание. Команда меню Создать модульные тесты доступна только для кода C#. Чтобы использовать этот метод для .NET Core или .NET Standard, требуется Visual Studio 2019 или более поздней версии.

Примечание. Команда меню Создать модульные тесты доступна только для кода C#. Чтобы использовать этот метод для .NET Core или .NET Standard, требуется Visual Studio 2019 или более поздней версии.




Создание проекта и модульных тестов вручную
Проект модульного теста отражает структуру проекта кода. В примере MyBank добавляются два проекта модульного тестирования с именами AccountsTests и BankDbTests в решение Bank . Имена проекта теста произвольны, но рекомендуется принять концепцию стандартного именования.
Добавление нового проекта модульного тестирование в решение
- В обозревателе решений щелкните решение правой кнопкой мыши и выберите пункты Добавить>Новыйпроект.
- Введите test в поле поиска шаблона проекта, чтобы найти шаблон проекта модульного теста для платформы тестирования, которую вы хотите использовать. (В примерах этого раздела мы используем MSTest.)
- На следующей странице присвойте проекту имя. Для тестирования проекта Accounts в нашем примере проект можно назвать AccountsTests .
- В проекте модульного тестирования добавьте ссылку на проект кода в тесте, а в данном примере — на проект Счета. Создание ссылки на проект кода
- В проекте модульного теста в обозревателе решений щелкните правой кнопкой мыши узел Ссылки или Зависимости, после чего выберите Добавить ссылку на проект или Добавить ссылку, в зависимости от того, что доступно.
- В диалоговом окне диспетчера ссылок откройте узел Решение и выберите Проекты. Выберите наименование проекта кода и закройте диалоговое окно.
Каждый проект модульного тестирования содержит классы, которые отражают имена классов в проекте кода. В данном примере проект AccountsTests будет содержать следующие классы.
- Класс AccountInfoTests содержит методы модульного тестирования для класса AccountInfo в проекте Accounts .
- Класс CheckingAccountTests содержит методы модульного тестирования для класса CheckingAccount .
Написание тестов
Платформа модульного тестирования и Visual Studio IntelliSense помогут вам в написании кода модульных тестов для проекта кода. Для запуска в обозревателе тестов многие платформы требуют добавления особых атрибутов для определения методов модульного тестирования. Платформы также предоставляют способ — обычно при помощи оператора контроля или атрибутов метода -— для определения успешности или не успешности теста. Другие атрибуты определяют необязательные методы установки, которые выполняются при инициализации класса и перед каждым методом тестирования, а также методы разборки, которые запускаются после каждого метода тестирования и после уничтожения класса.
Модель AAA (размещение, действие, утверждение) является стандартным способом написания модульных тестов для метода тестирования.
- Подраздел Размещение метода модульного тестирования инициализирует объекты и устанавливает значение данных, которые переданы методу для теста.
- Подраздел Действие вызывает метод для теста с размещенными параметрами.
- Подраздел Утверждение проверяет, чтобы метод для теста действовал, как ожидается. В .NET для проверки зачастую используются методы класса Assert.
Чтобы протестировать метод CheckingAccount.Withdraw в контексте нашего примера, мы можем написать два теста: один, проверяющий стандартное поведение метода, и второй, проверяющий, что снятие суммы, превышающей остаток, не удастся (в нижеприведенном коде показан модульный тест MSTest, который поддерживается в .NET.). В классе CheckingAccountTests добавьте следующие методы.
[TestMethod] public void Withdraw_ValidAmount_ChangesBalance() < // arrange double currentBalance = 10.0; double withdrawal = 1.0; double expected = 9.0; var account = new CheckingAccount("JohnDoe", currentBalance); // act account.Withdraw(withdrawal); // assert Assert.AreEqual(expected, account.Balance); >[TestMethod] public void Withdraw_AmountMoreThanBalance_Throws() < // arrange var account = new CheckingAccount("John Doe", 10.0); // act and assert Assert.ThrowsException(() => account.Withdraw(20.0)); >Дополнительные сведения о платформах модульного тестирования Microsoft см. в одном из следующих разделов:
- Модульное тестирование кода
- Создание модульных тестов для C/C++
- Использование платформы MSTest в модульных тестах
Настройка времени ожидания для модульных тестов
Если вы используете платформу MSTest, можно использовать TimeoutAttribute для установки времени ожидания в отдельном методе теста:
[TestMethod] [Timeout(2000)] // Milliseconds public void My_Test()
Задние лимита времени на максимально разрешенный
[TestMethod] [Timeout(TestTimeout.Infinite)] // Milliseconds public void My_Test ()
Выполнение тестов в обозревателе тестов
При построении проекта тестирования тесты появляются в обозревателе тестов. Если обозреватель тестов не виден, выберите Тест в меню Visual Studio, Windows, затем обозреватель тестов (или нажмите клавиши CTRL + E, T).


При выполнении, написании и повторном запуске тестов обозреватель тестов может отображать результаты в группах Неудачные тесты, Пройденные тесты, Пропущенные тесты и Незапущенные тесты. Можно выбирать различные группы по параметрам на панели инструментов.
Кроме того, можно фильтровать тесты по совпадению текста в поле поиска на глобальном уровне или с помощью одного из предустановленных фильтров. Можно запустить любую выборку тестов в любое время. Результаты запущенного теста появляются сразу же в строке «успешно/не успешно» наверху окна обозревателя. Детальная информация результата метода тестирования отображается при выборе теста.
Выполнение и просмотр тестов
Панель инструментов обозревателя тестов помогает найти, организовать и запустить необходимые тесты.


Можно выбрать Запустить все, чтобы запустить все тесты (или нажать клавиши CTRL + R, V), или выбрать Запустить, чтобы выбрать подмножество тестов для запуска (или нажать клавиши CTRL + R, T). Выберите тест, чтобы просмотреть детальную информацию по нему на панели сведений. Выберите «Открыть тест » в меню правой кнопкой мыши (клавиатура: F12), чтобы отобразить исходный код для выбранного теста.
Если отдельные тесты не имеют зависимостей, предотвращающих запуск этих тестов в любом порядке, включите параллельное тестирование в меню параметров на панели инструментов. Это может заметно сократить время, необходимое для выполнения всех тестов.
Запуск тестов после каждой сборки
Чтобы запустить модульные тесты после каждой локальной сборки, на панели инструментов обозревателя тестов щелкните значок «Параметры» и выберите в меню пункт Выполнить тесты после сборки.
Фильтрация и группировка списка тестов
Если тестов много, можно отфильтровать список по определенной строке. Для этого введите соответствующий текст в поле поиска обозревателя тестов. Можно ограничить фильтр при помощи выбора фильтров из списка.


Кнопка Description 
Для группировки тестов по категории, нажмите кнопку Группировать по . Q&A
Вопрос. Как выполнять отладку модульных тестов?
Ответ. Чтобы запустить сеанс отладки для тестов, можно использовать обозреватель тестов. Пошагово выполняя код, отладчик Visual Studio плавно переключается назад и вперед между модульными тестами и проектом для тестирования. Начало отладки
-
В редакторе Visual Studio установите точку останова в одном или нескольких методах тестирования, которые вы хотите проверить.
Примечание. Так как методы тестирования могут запускаться в любом порядке, необходимо устанавливать точки останова во всех методах тестирования, которые необходимо проверить.
См. дополнительные сведения об отладке модульных тестов.
В. Если я использую TDD, как я могу создать код из тестов?
Ответ. Используйте быстрые действия для создания классов и методов в коде проекта. Напишите инструкцию в методе тестирования, которая вызывает класс или метод, который необходимо создать, затем щелкните значок лампочки, отображаемый под ошибкой. Если вызов предназначен для конструктора нового класса, выберите Сформировать тип из меню и следуйте подсказкам мастера, чтобы вставить класс в проект кода. Если вызов предназначен для метода, выберите Сформировать метод из меню IntelliSense.


Вопрос. Можно ли создать модульные тесты, которые принимают несколько наборов данных в качестве входных данных для выполнения теста?
Ответ. Да. Управляемые данными методы тестирования позволяют тестировать диапазон значений с помощью одного метода модульного теста. DataRow DynamicData Используйте атрибут DataSource для метода теста, указывающего источник данных, содержащий значения переменных, которые требуется проверить.
Метод атрибута выполняется один раз для каждой строки в источнике данных. Обозреватель тестов оповещает о неудачном тесте для метода, если одна из итераций не была успешной. Панель подробных результатов теста для метода показывает статус «прошел/неудачен» для каждого ряда данных.
Вопрос. Можно ли узнать, какой объем кода проверяется модульными тестами?
Ответ. Да. Можно определить объем кода, который был фактически проверен модульными тестами, с помощью средства покрытия кода в Visual Studio Enterprise. Поддерживаются машинные и управляемые языки и все платформы модульного тестирования, которые могут быть запущены платформой модульного тестирования.
Можно запустить покрытие кода на выбранных тестах или на всех тестах решения. Окно результатов объема протестированного кода отображает процент блоков кода продукта, которые были задействованы по строке, функции, классу, пространству имен и модулю.
Чтобы запустить анализ объема протестированного кода для методов теста в решении, выберите Тестирование>Анализ покрытия кода для всех тестов.
Результаты покрытия появляются в окне Результаты объема протестированного кода.


Вопрос. Можно ли протестировать методы в коде, которые имеют внешние зависимости?
Ответ. Да. В выпуске Visual Studio Enterprise компонент Microsoft Fakes можно использовать с методами тестов, которые были написаны с помощью платформ модульного тестирования для управляемого кода.
Microsoft Fakes использует два подхода при создании классов-заменителей для внешних зависимостей:
- Заглушки создают классы на замену, которые являются производными от родительского интерфейса класса зависимости цели. Методы заглушек могут быть заменены на публичные виртуальные методы класса цели.
- Оболочки используют инструментарий среды выполнения для перевода вызовов целевого метода на метод заменяющей оболочки для невиртуальных методов.
При обоих подходах используются созданные делегаты вызовов для метода зависимости для определения требуемого поведения в данном методе тестирования.
В. Можно ли использовать другие платформы модульного тестирования для создания модульных тестов?
О . Да, выполните инструкции по поиску и установке других платформ. Перезапустив Visual Studio, повторно откройте решение, чтобы создать модульные тесты, и выберите установленные платформы здесь:

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