Какие шаблоны тестовых проектов имеются в visual studio 2012

Обновлено: 07.07.2024

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

Подготовка

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

Visual Studio

Visual Studio – это основной инструмент, который вы будете использовать для написания кода на JavaScript, отладки и настройки приложений для Магазина Windows . Visual Studio имеет несколько ключевых возможностей, которыми вы будете пользоваться:

  • Visual Studio предоставляет четкие и понятные редакторы кода и HTML с системой IntelliSense;
  • в Visual Studio есть возможность отлаживать код, используя точки останова, и также возможен просмотр контрольных значений (Watches) для отладки нештатных ситуаций в процессе исполнения кода;
  • мы можем применять редакторманифеста (описания) приложения (Application Manifest Editor) для установки некоторых свойств приложения, таких, как безопасность, ориентация устройства, иконки и настройки Магазина Windows.

Шаблоны в Visual Studio

Visual Studio по умолчанию включает в себя несколько шаблонов, которые представляют собой основу для приложений, выполненных по принципам нового дизайна для Windows . Вы можете найти эти шаблоны в меню Файл /Создать проект (File> New > Project ), выбрав в левой панели пункт "JavaScript".

Пустое приложение

Шаблон пустого приложения (Blank App) идеально подходят для создания приложений "с нуля" с уникальным пользовательским интерфейсом.

Тип: JavaScript. Одностраничный проект приложения для Магазина Windows, который не содержит предопределенные элементы управления и макет


Тип: JavaScript. Одностраничный проект приложения для Магазина Windows, который не содержит предопределенные элементы управления и макет

Приложение таблицы

Этот шаблон на основе сетки (Grid App) позволяет просматривать иерархические данные в трех видах: Узлы, Разделы и Сведения. Пользователи могут легко заходить в группы и изучать данные в различном виде. Это идеальный шаблон для любых сгруппированных данных.

Тип: JavaScript. Трехстраничный проект приложения для Магазина Windows, которое осуществляет переходы между группами элементов, расположенных в сетке. Сведения о группах и элементах отображаются на выделенных страницах


Тип: JavaScript. Трехстраничный проект приложения для Магазина Windows, которое осуществляет переходы между группами элементов, расположенных в сетке. Сведения о группах и элементах отображаются на выделенных страницах

Приложение с разделением

Шаблон Приложение с разделением (Split App) похож на шаблон Приложение таблицы, с той разницей, что на одной "разделенной" странице отображается и список групп, и сведения для выбранной группы. Этот шаблон позволяет быстро просматривать несколько страниц сведений в группе без необходимости дальнейшей навигации.

Тип: JavaScript. Двухстраничный проект приложения для Магазина Windows, которое осуществляет переходы между группированными элементами. Первая страница позволяет выбрать группу, а вторая отображает список элементов вместе со сведениями о выбранном элементе


Тип: JavaScript. Двухстраничный проект приложения для Магазина Windows, которое осуществляет переходы между группированными элементами. Первая страница позволяет выбрать группу, а вторая отображает список элементов вместе со сведениями о выбранном элементе

Приложение с фиксированным макетом

Шаблон приложения с фиксированным макетом (Fixed Layout App) похож на шаблон пустого приложения, но способен масштабировать содержимое под размер экрана устройства. Например, если ваш дизайн разработан под экран 800 х 600 пикселей, а у пользователя устройство с разрешением 1600 х 900, то этот шаблон автоматически масштабирует содержимое под разрешение 1600 х 900.

Этот шаблон идеален для игр.

Тип: JavaScript. Проект приложения для Магазина Windows, которое масштабируется с использованием макета с фиксированными пропорциями


Тип: JavaScript. Проект приложения для Магазина Windows, которое масштабируется с использованием макета с фиксированными пропорциями

Приложение навигации

Тип: JavaScript. Проект приложения для Магазина Windows, которое содержит предопределенные элементы управления для навигации


Тип: JavaScript. Проект приложения для Магазина Windows, которое содержит предопределенные элементы управления для навигации

Для более подробного описания шаблонов для JavaScript воспользуйтесь ресурсом:

  • К шаблонам проектов относятся файлы проекта, файлы кода и другие ресурсы, настроенные для создания приложения или компонента, которые может загрузить и использовать приложение.
  • Шаблоны элементов — это файлы проекта, которые содержат часто используемые код и XAML, которые можно добавить в проект, чтобы ускорить разработку. Например, с помощью шаблона элемента можно добавить в приложение новое окно, страницу или элемент управления.

Дополнительные сведения об установке и настройке Visual Studio для получения доступа к этим шаблонам см. в статье Настройка среды разработки.

Шаблоны WinUI

WinUI 3 предоставляется в пакете SDK для приложений Windows. Она включает пакет VSIX для Visual Studio 2019 и более поздних версий с шаблонами проектов и элементов, которые помогут приступить к созданию приложений с помощью интерфейса на основе WinUI.

Дополнительные сведения о доступных шаблонах проектов и элементов WinUI см. в разделе Создание проектов WinUI 3.

Шаблоны UWP

Шаблоны проектов для C++ и UWP

Для создания приложений UWP можно использовать две технологии C++:

  • Рекомендуемая технология — C++/WinRT. Это проекция языка C++, которая полностью реализована в файлах заголовков и предназначена для предоставления эффективного и удобного доступа к современному API WinRT.
  • Кроме того, можно использовать более старый набор расширений C++/CX. C++/CX по-прежнему поддерживается, но мы рекомендуем вместо него использовать C++/WinRT.

Чтобы получить доступ к шаблонам проектов UWP C++, когда вы создаете проект в Visual Studio, отфильтруйте язык, выбрав C++ , платформу, выбрав Windows, и тип проекта, выбрав значение UWP.

По умолчанию рабочая нагрузка Разработка приложений для универсальной платформы Windows в Visual Studio предоставляет доступ только к шаблонам проектов C++/CX. Чтобы получить доступ к шаблонам проектов C++/WinRT, необходимо установить пакет VSIX C++/WinRT.

Шаблоны проектов UWP C++

Эти шаблоны проектов можно использовать для создания приложений UWP на C++.

Шаблон Описание
Пустое приложение (C++/WinRT) Создает приложение UWP C++/WinRT с пользовательским интерфейсом XAML. Созданный проект содержит базовую страницу, производную от класса Windows.UI.Xaml.Controls.Page, с помощью которой можно приступить к созданию пользовательского интерфейса.
Приложение основных компонентов (C++/WinRT) Создает приложение UWP C++/WinRT, которое использует CoreApplication для интеграции с различными платформами пользовательского интерфейса вместо пользовательского интерфейса XAML. См. пошаговые инструкции по созданию с помощью этого шаблона проекта простой игры UWP, использующей DirectX.
Пустое приложение (универсальное приложение для Windows — C++/CX) Создает приложение UWP C++/WinRT с пользовательским интерфейсом XAML. Созданный проект содержит в библиотеке WinUI базовую страницу, производную от класса Windows.UI.Xaml.Controls.Page, с помощью которой можно приступить к созданию пользовательского интерфейса.
Приложение DirectX 11 и XAML (универсальное приложение для Windows — C++/CX) Создает приложение UWP, которое использует DirectX 11 и SwapChainPanel, чтобы можно было использовать элементы управления пользовательского интерфейса XAML. Дополнительные сведения см. в статье Шаблоны проектов игр DirectX.
Приложение DirectX 11 (универсальное приложение для Windows — C++/CX) Создает приложение UWP, которое использует DirectX 11. Дополнительные сведения см. в статье Шаблоны проектов игр DirectX.
Приложение DirectX 12 (универсальное приложение для Windows — C++/CX) Создает приложение UWP, которое использует DirectX 12. Дополнительные сведения см. в статье Шаблоны проектов игр DirectX.
Приложение модульных тестов (универсальное приложение для Windows — C++/CX) Создает проект модульного теста в C++/CX для приложения UWP. Дополнительные сведения см. в статье о тестировании DLL-библиотеки C++ UWP.

С помощью этих шаблонов проектов можно создавать фрагменты приложений UWP на C++.

Шаблон Описание
Компонент среды выполнения Windows (C++/WinRT) Создает компонент среды выполнения Windows на C++/WinRT, который может использоваться в любом приложении UWP, независимо от того, на каком языке программирования такое приложение написано.
Компонент среды выполнения Windows (универсальные приложения для Windows) Создает компонент среды выполнения Windows на C++/CX, который может использоваться в любом приложении UWP, независимо от того, на каком языке программирования такое приложение написано.
Библиотека DLL (универсальные приложения для Windows) Проект для создания библиотеки динамической компоновки (DLL), которую можно использовать в приложении UWP, на C++/CX. Дополнительные сведения см. в статье Библиотеки DLL (C++/CX).
Статическая библиотека (универсальные приложения для Windows) Проект для создания статической библиотеки (LIB), которую можно использовать в приложении UWP, на C++/CX. Дополнительные сведения см. в статье Статические библиотеки (C++/CX).

Шаблоны классических приложений C++ (Win32)

Visual Studio предоставляет разнообразные шаблоны проектов для создания классических приложений для Windows с использованием нативного C++ и прямым доступом к API Win32. Чтобы использовать эти шаблоны проектов, при установке Visual Studio необходимо включить рабочую нагрузку Разработка классических приложений на C++ . Эта рабочая нагрузка включает шаблоны проектов для создания классических и консольных приложений, а также библиотек.

Рекомендуемая технология — C++/WinRT. Это проекция языка C++, которая полностью реализована в файлах заголовков и предназначена для предоставления эффективного и удобного доступа к современному API WinRT.

Шаблоны проектов для классических приложений С++

Чтобы получить доступ к шаблонам проектов C++ для классических приложений, когда вы создаете проект в Visual Studio, отфильтруйте язык, выбрав C++ , платформу, выбрав Windows, и тип проекта, выбрав значение Desktop (Классическое приложение).

Шаблоны проектов приложений на нативном C++

Шаблон Описание
Классическое приложение для Windows (C++/WinRT) Создает клиентское приложение C++/WinRT для рабочего стола Windows. Дополнительные сведения см. в разделе Классическое приложение Windows (C++/WinRT). Для этого шаблона проекта требуется VSIX C++/WinRT.
Классическое приложение для Windows Создает классическое приложение для Windows с использованием C++. Дополнительные сведения см. в статье Пошаговое руководство. Создание традиционного классического приложения для Windows (C++).
Мастер классических приложений Windows Это пошаговый мастер, с помощью которого можно создать один из следующих типов проектов: классическое приложение для Windows, консольное приложение, библиотека динамической компоновки (DLL) или статическая библиотека. Дополнительные сведения см. в статьях Мастер классических приложений Windows и Пошаговое руководство. Создание традиционного классического приложения для Windows (C++).
Проект упаковки приложений Windows Создает проект, с помощью которого можно разработать классическое приложение в пакете MSIX. Благодаря этому пользователь получает современные методы развертывания, возможности интеграции с компонентами Windows через расширения пакетов и многое другое. Дополнительные сведения см. в статье о Проекте упаковки приложений Windows.

Шаблоны проектов для консольных приложений С++

Чтобы получить доступ к шаблонам проектов C++ для консольных приложений, отфильтруйте язык, выбрав C++ , платформу, выбрав Windows, и тип проекта, выбрав значение Console (Консольное приложение).

Шаблоны проектов консольных приложений на нативном C++

Шаблон Описание
Консольное приложение для Windows (C++/WinRT) Создает консольное приложение C++/WinRT без пользовательского интерфейса. Дополнительные сведения см. в статье Краткое руководство по C++/WinRT. Для этого шаблона проекта требуется VSIX C++/WinRT.
Консольное приложение Создает консольное приложение без пользовательского интерфейса. Дополнительные сведения см. в статье Пошаговое руководство. Создание стандартной программы C++.
Пустой проект Пустой проект для создания приложения, библиотеки или DLL. Необходимо добавить требуемый код или ресурсы.

Шаблоны проектов для библиотек С++

Чтобы получить доступ к шаблонам проектов C++ для библиотек, отфильтруйте язык, выбрав C++ , платформу, выбрав Windows, и тип проекта, выбрав значение Библиотека.

Шаблоны проектов библиотек на нативном C++

Шаблон Описание
Библиотека динамической компоновки (DLL) Проект для создания библиотеки динамической компоновки (DLL). Дополнительные сведения см. в статье Пошаговое руководство. Создание и использование собственной библиотеки динамической компоновки (C++).
Статическая библиотека Проект для создания статической библиотеки (LIB). Дополнительные сведения см. в статье Пошаговое руководство. Создание и использование статической библиотеки.

Шаблоны элементов для классических приложений С++

Шаблоны проектов C++ включают множество шаблонов элементов, с помощью которых можно выполнять такие задачи, как добавление в проект новых файлов и ресурсов. Полный список см. в статье об использовании шаблонов Visual C++ в диалоговом окне "Добавление нового элемента".

Создание приложения Windows Forms для C++ в Visual Studio 2012 и 2013 уже рассматривалось в одной из предыдущих статей.

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

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

Процесс создания подробно описан в статье «Windows Forms в C++ для Visual Studio 2012, 2013». Поэтому не станем здесь заострять на нём внимание.

После того как заготовка приложения готова необходимо экспортировать её в шаблон. Для этого в меню «Файл» Visual Studio необходимо выбрать пункт «Экспорт шаблона».

Выбор типа шаблона

В открывшемся начальном окне мастера по умолчанию уже установлен нужный переключатель «Экспорт шаблона». Всё, что нужно сделать в этом окне – просто нажать кнопку «Далее».

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

В данном примере, шаблон назван «Приложение Windows Forms».

Выбор параметров шаблона

Во втором оке также установлены два флажка «Автоматически импортировать шаблон в Visual Studio»(этот флажок должен быть установлен обязательно, иначе шаблон при дётся импортировать вручную (см.ниже) и «Открыть окно проводника в папке выходных файлов» (при желании, его можно спокойно снять).

При необходимости, можно ввести текстовое описание для шаблона и задать пиктограмму для него, которая будет отображаться в окне выбора типа проекта Visual Studio.

Эти параметры не являются обязательными и если этого их не указать, ничего особенного не произойдёт

Описание шаблона при отсутствии просто будет заменено его именем. А, если не задана пиктограмма, Visual Studio просто назначит ему стандартную.

После нажатия кнопки «Готово» в окне выбора проектов должен появиться созданный шаблон.

Если в имени шаблона имеются русские буквы, Visual Studio выдаст предупреждение, но его можно проигнорировать. На работу шаблона это влияние не окажет.

Шаблон проекта

Теперь можно создавать проекты Windows Forms в Visual Studio 2012 (2013) привычным способом.

Возможные проблемы

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

Импорт шаблона завершился неудачно и он не отображается в Visual Studio.
Чтобы решить эту проблему необходимо открыть папку, в которой хранятся экспортированные шаблоны. Для Visual Studio 2013 обычно это: C:\Users\UserName\Documents\Visual Studio 2013\My Exported Templates. Найти в этой папке нужный шаблон (имя файла соотевтсвует имени шаблона) и скопировать его в папку пользовательских шаблонов Visual C++. Для Visual Studio 2013 это чаще всего папка: C:\Users\UserName\Documents\Visual Studio 2013\Templates\ProjectTemplates\Проект Visual C++.
В зависимости от настроек и используемой версии Visual Studio фактическое расположение папок может отличаться.
В результате, шаблон проекта должен отображаться в Visual Studio, как показано на скриншоте выше.

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

Начало тут похожее на создание шаблона элемента. Меню Проект - Экспорт шаблона.


Выбираем Шаблон проекта, проект, на основе которого ходим сделать шаблон, жмём Далее.


Здесь все так же, как и в случае с шаблоном элемента. Только вместо Далее жмем Готово.

В проект для шаблона я добавил пустую папку Controllers, пустой класс Startup.cs, одну ссылку на локальный проект и одну ссылку на Nuget пакет.


Найти шаблон проекта значительно сложнее, чем шаблон элемента, потому что проект попадает отнюдь не в начало списка. Тут придется воспользоваться поиском.


Я ни в случае с шаблоном элемента ни в случае с шаблоном проекта создание на основе шаблона не демонстрировал, потому что в этом нет смысла. Создастся то, что вы в шаблон заложили, с тонкими настройками мы не играли. Поэтому сразу перейдем внутренностям нашего шаблона.

Шаблон проекта так же является zip архивом. Вот его содержимое


Здесь файл с иконкой, файл vstemplate с настройками шаблона и файлы (контент) шаблона. Так как это проект, среди файлов есть файл csproj. Ну и файл startup.cs, который мы тоже добавили.

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

Интерес тут представляет файл vstemplate.

Как видите, VSTemplate.Type тут имеет значение Project.

ProjectType может содержать одно из трех значений: CSharp, VisualBasic или Web.

CreateNewFolder отвечает за создание проекта в отдельной папке.

LocationField отвечает за то, будет ли в диалоговом окне создания проекта поле с расположением создаваемого проекта.

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

Здесь элемент ProjectItem содержится внутри блока Project.

Project отвечает за создание проекта. атрибуты у этого элемента идентичны ProjectItem (есть некоторые различия, но нас они сейчас не интересуют).

Помните, мы могли найти наш шаблон только по имени? Можно добавить к нему теги. Для этого существует три дополнительных настройки в блоке TemplateData. Это LanguageTag, PlatformTag и ProjectTypeTag. Давайте добавим их и посмотрим что получится.

Заменим файл в архиве и перезапустим студию.


Теперь наш шаблон можно найти по тегам. Чтобы добавить несколько тегов одного типа, нужно в продублировать элементы.

Полное описание работы с тегами здесь.

Почему то я не смог вывести шаблон проекта вверх изменяя SortOrder. Может, кто-нибудь подскажет почему?

Путь для шаблонов проектов, кстати

C:\Users\[user_name]\Documents\Visual Studio 2019\Templates\ProjectTemplates

И еще одна деталь. Возможно это и очевидно, но шаблоны эти для Visual Studio, в dotnet они недоступны.

Visual Studio автоматически создаст заглушку для тестового проекта, с которого мы и начнем.

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

Модульные тесты обычно размещаются в отдельном проекте (в результате получается отдельная сборка) из кода вашего приложения. В Visual Studio 2008 или 2012 вы можете создать проект модульного теста, щелкнув правой кнопкой мыши решение и выбрав Add, а затем New Project из всплывающего меню:

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

В открывшемся диалоговом окне выберите тестовый проект:

VS2008 Новый тестовый проект
VS2012 Новый тестовый проект

Для пользователей Visual Studio 2008

Также удалите файл «ManualTest1.mht», в противном случае вам будет предложено выбрать результаты теста и ввести примечания к тесту вручную.

Испытательные приспособления

Методы испытаний

Обратите внимание, что метод украшен атрибутом TestMethod. Это определяет метод, который будет запускать тестовое устройство.

Класс Assert

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

  • AreEqual / AreNotEqual
  • AreSame / AreNotSame
  • IsTrue / IsFalse
  • IsNull / IsNotNull
  • IsInstanceOfType / IsNotInstanceOfType

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

Основы утверждения

Обратите внимание, что в следующих примерах используется VS2008.

Утверждения являются основой каждого теста. В отношении результатов теста можно сделать множество утверждений. Для начала напишем простое утверждение, в котором говорится «один равен одному», другими словами, трюизм:

Запустите тест, который должен привести к «Пройдено»:

Простое утверждение

AreEqual / AreNotEqual

Методы AreEqual и AreNotEqual сравнивают:

  • объекты
  • двойники
  • одиночный разряд
  • строки
  • типизированные данные

Что касается равенства объектов, этот метод сравнивает, идентичны ли экземпляры:

Предыдущий тест проходит, так как object1 и object2 не равны. Однако если класс переопределяет метод Equals, тогда равенство основывается на сравнении, выполненном методом Equals, реализованным в классе. Например:

AreSame / AreNotSame

Эти два метода проверяют, совпадают ли экземпляры (или нет). Например:

Несмотря на то, что класс AnObject переопределяет оператор Equals, предыдущий тест проходит, поскольку экземпляры двух объектов не совпадают.

IsTrue / IsFalse

Эти два метода позволяют вам проверить истинность сравнения значений. С точки зрения читабельности методы IsTrue и IsFalse обычно используются для сравнения значений , тогда как AreEqual и AreSame обычно используются для сравнения экземпляров (объектов).

Это подтверждает это значение свойства.

IsNull / IsNotNull

Эти два теста проверяют, является ли объект нулевым или нет:

IsInstanceOfType / IsNotInstanceOfType

Эти два метода проверяют, является ли объект экземпляром определенного типа (или нет). Например:

неубедительный

Метод Assert.Inconclusive можно использовать, чтобы указать, что ни тест, ни функциональность, стоящая за тестом, еще не реализованы, и поэтому тест не является окончательным.

Что происходит, когда утверждение не выполняется?

Что касается модульного тестирования Visual Studio, то при сбое утверждения метод Assert создает исключение AssertFailedException. Это исключение никогда не должно обрабатываться вашим тестовым кодом.

Другие классы утверждений

Есть два других класса утверждений:

Как видно из их названий, эти утверждения работают с коллекциями и строками соответственно.

Сборник утверждений

Эти методы реализованы в классе Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert. Обратите внимание, что параметр коллекции в этих методах предполагает, что коллекция будет реализовывать ICollection (в отличие от NUnit, который ожидает IEnumerable).

AllItemsAreInstanceOfType

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

AllItemsAreNotNull

Это утверждение проверяет, что объекты в коллекции не являются нулевыми.

AllItemsAreUnique

Этот тест гарантирует, что объекты в коллекции являются уникальными. Если сравнивать структуры:

этот тест проходит:

AreEqual / AreNotEqual

Эти тесты утверждают, что две коллекции равны. Методы включают в себя перегрузки, которые позволяют предоставить метод сравнения. Если объект переопределяет метод Equals, этот метод будет использоваться для определения равенства. Например:

Эти две коллекции равны, потому что класс AnObject переопределяет метод Equals (см. Предыдущий пример).

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

AreEquivalent / AreNotEquivalent

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

Визуальные Студии - Эквивалентная Ошибка

CollectionAssert.AreEquivalent не удалось. Ожидаемая коллекция содержит 1 случай (ы) из. Фактическая коллекция содержит 0 вхождений.

Принимая во внимание, что реализация NUnit этого утверждения проходит:

NUnits AreEvivalent работает правильно

Содержит / DoesNotContain

Это утверждение проверяет, что объект содержится в коллекции:

используя метод Equals (если он переопределен) для выполнения теста на равенство.

IsSubsetOf / IsNotSubsetOf

Это утверждение проверяет, что первый параметр (подмножество) содержится в коллекции второго параметра (надмножество).

Строковые утверждения

Эти методы реализованы в классе Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert:

  • Содержит
  • Матчи / DoesNotMatch
  • StartsWith / EndsWith

Это обсуждается далее.

Содержит

Метод Contains утверждает, что подмножество (обратите внимание, что это второй параметр) содержится в строке (первый параметр). Например, этот тест проходит:

Матчи / DoesNotMatch

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

StartsWith / EndsWith

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

Исключения

Исключения могут быть проверены без написания блоков try-catch вокруг метода test. Например, пока вы могли бы написать это:

Намного удобнее использовать атрибут ExpectedException в тестовом методе:

Другие полезные атрибуты

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

Настройка / Teardown

Модуль модульного тестирования Visual Studio предоставляет четыре дополнительных атрибута метода:

  • ClassInitialize
  • ClassCleanup
  • TestInitialize
  • TestCleanup

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

Обратите внимание, что методы, украшенные этим атрибутом, должны быть статическими.

ClassInitialize

Если метод украшен этим атрибутом, код в методе выполняется до запуска всех тестов в приборе. Обратите внимание, что этот метод требует параметр TestContext.

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

ClassCleanup

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

TestInitialize

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

TestCleanup

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

Настройка и демонтаж

Следующий код демонстрирует последовательность настройки и демонтажа прибора по отношению к фактическим тестам:

Запуск этого устройства приводит к следующей трассировке выходных данных отладки:

Менее часто используемые атрибуты

В следующем разделе описаны менее часто используемые атрибуты.

AssemblyInitialize / AssemblyCleanup

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

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

«UTA013: UnitTestExamplesVS2008.Fixture2: невозможно определить более одного метода с атрибутом AssemblyInitialize внутри сборки».

Поэтому для сборки может существовать только один метод AssemblyInitialize и один метод AssemblyCleanup, независимо от количества тестовых приборов в этой сборке. Поэтому рекомендуется, чтобы никакие фактические тесты не помещались в класс, который определяет эти методы:

в результате получается следующая последовательность выполнения:

Обратите внимание на дополнительные вызовы инициализации и очистки сборки.

игнорировать

Этот метод может украшать определенные методы или целые приборы.

Игнорировать метод испытаний

Если этот атрибут украшает метод теста:

тест не запустится. К сожалению, панель результатов теста Visual Studio не указывает на то, что в настоящее время игнорируются тесты:

Игнорируемые тесты не отображаются

Сравните это с NUnit, который ясно показывает проигнорированные тесты:

NUnit показывает игнорируемые тесты

Дисплей NUnit помечает все тестовое дерево как «неизвестное», если один или несколько методов теста помечены как «Игнорировать»

Игнорировать тестовое приспособление

Методы всего прибора могут быть проигнорированы с помощью атрибута Ignore на уровне класса:

Очистка кеша теста

владелец

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

DeploymentItem

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

Описание

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

HostType

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

приоритет

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

Рабочий элемент

Если вы используете Team Foundation Server (TFS), вы можете использовать этот атрибут в методе тестирования, чтобы указать идентификатор рабочего элемента, назначенный TFS для конкретного модульного теста.

CssIteration / CssProjectStructure

Эти два атрибута используются во взаимосвязи с TeamBuild и TestManagementService и позволяют вам указать итерацию проекта, которой соответствует метод теста.

Параметризованное тестирование с атрибутом источника данных

Модуль модульного тестирования Microsoft поддерживает CSV, XML или источники данных базы данных для параметризованного тестирования. Это не совсем верно параметризованное тестирование (см., Как NUnit реализует параметризованное тестирование), потому что параметры не передаются методу модульного теста, а должны быть извлечены из источника данных и переданы тестируемому методу. Однако возможность загрузки тестовых данных в DataTable из различных источников полезна для автоматизации тестирования вождения.

CSV Источник данных

Текстовый файл с разделителями-запятыми может использоваться для источника данных:

и используется в методе испытаний:

Обратите внимание, что в окне результатов теста не отображаются параметры запуска (в отличие от NUnit):

Параметризованные результаты испытаний

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

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