在Visual Studio 2010中开发和运行MSTest单元测试,不包括.vsmdi和.testsettings

Chr*_*man 9 mstest metadata visual-studio-2010

我知道这在某种程度上是可能的,因为我们有一个项目包含可通过VS2010测试运行器运行的MSTest单元测试.我们甚至可以向现有项目添加新的测试方法或类,并且运行器将选择它们并将它们包含在测试运行中.

当我尝试向解决方案添加新的单元测试项目时出现问题.如果我将"测试项目"类型的项目添加到解决方案中,VS2010将生成测试元数据和设置文件,这些文件是在其他项目中运行任何其他测试所不需要的.例如,对于OSS项目,这是不合需要的.如果我只是添加一个普通的"类库"项目,并将单元测试放入其中,测试运行器会忽略它们,我根本无法识别它们.

我疯了吗?这是侥幸吗?甚至可以让VS2010运行我们的测试,而不需要.vsmdi文件或.testsettings文件?或者我错过了为新项目工作所需的设置或配置?

aL3*_*891 6

你确实可以在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>
Run Code Online (Sandbox Code Playgroud)

这是一个测试项目:

<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>
Run Code Online (Sandbox Code Playgroud)

最后一个元素ProjectTypeGuids是告诉VS它可以运行MSTest测试的项目.据我所知,这些guid总是一样的,[至少给出相同版本的VS]所以你应该能够将该行粘贴到任何.csproj文件中并让VS识别内部的测试.

测试设置文件可用于指定部署选项(以及其他很多东西),但大多数选项也可以在mstest.exe的命令行中指定

也可以通过向测试方法添加属性来替换.vsmdi.大多数(如果不是)Properties测试中可用的所有选项都可以设置为属性以及vsmdi文件.我通常更喜欢属性,因为它们"更接近"代码.