Разработка и запуск модульных тестов MSTest в Visual Studio 2010 без включения .vsmdi и .testsettings - PullRequest
9 голосов
/ 11 июня 2011

Я знаю, что это как-то возможно, так как у нас есть проект, который содержит модульные тесты MSTest, которые можно запустить через тестер VS2010.Мы даже можем добавить новые методы или классы тестирования в существующие проекты, и бегун подберет их и включит в тестовый прогон.

Проблема возникает, когда я пытаюсь добавить новый проект модульного теста врешение.Если я добавлю в решение проект типа «тестовый проект», VS2010 сгенерирует тестовые метаданные и файлы настроек, которые не были необходимы для выполнения каких-либо других тестов в других проектах.Это нежелательно, например, для проекта OSS.Если я просто добавлю обычный проект «библиотеки классов» и добавлю в него модульные тесты, тестовый прогон игнорирует их, и я не могу заставить его вообще их распознавать.Это случайность?Может ли VS2010 даже запустить наши тесты без файла .vsmdi или файла .testsettings?Или я пропускаю настройку или конфигурацию, которая требуется для того, чтобы эта работа работала для новых проектов?

1 Ответ

6 голосов
/ 27 июня 2011

Вы действительно можете запускать тесты в VS без файлов .vsmdi и .testsettings (фактически, вы можете просто удалить их после добавления тестового проекта)

Так почему же он не работает с обычной библиотекой классов? awnser находится внутри файла .csproj. Это обычная библиотека классов:

<PropertyGroup>
  <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
  <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  <ProductVersion>8.0.30703</ProductVersion>
  <SchemaVersion>2.0</SchemaVersion>
  <ProjectGuid>{F191EC72-AFDF-49CE-A918-01905E7C32EF}</ProjectGuid>
  <OutputType>Library</OutputType>
  <AppDesignerFolder>Properties</AppDesignerFolder>
  <RootNamespace>test</RootNamespace>
  <AssemblyName>test</AssemblyName>
  <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  <FileAlignment>512</FileAlignment>
</PropertyGroup>

А это тестовый проект:

<PropertyGroup>
  <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
  <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  <ProductVersion>8.0.30703</ProductVersion>
  <SchemaVersion>2.0</SchemaVersion>
  <ProjectGuid>{F191EC72-AFDF-49CE-A918-01905E7C32EF}</ProjectGuid>
  <OutputType>Library</OutputType>
  <AppDesignerFolder>Properties</AppDesignerFolder>
  <RootNamespace>test</RootNamespace>
  <AssemblyName>test</AssemblyName>
  <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  <FileAlignment>512</FileAlignment>
  <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup>

Этот последний элемент, ProjectTypeGuids, говорит VS, что это проект, на котором вы можете запускать тесты MSTest. насколько мне известно, эти руководства всегда одинаковы, [по крайней мере, с учетом той же версии VS], поэтому вы должны иметь возможность вставить эту строку в любой файл .csproj и заставить VS распознавать тесты внутри.

Файл настроек теста может быть полезен для указания параметров развертывания (и многих других), но большинство параметров также можно указать в командной строке для mstest.exe

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

...