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

时间:2011-06-10 20:06:47

标签: visual-studio-2010 metadata mstest

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

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

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

1 个答案:

答案 0 :(得分:6)

你确实可以在没有.vsmdi和.testsettings文件的情况下在VS中运行测试(事实上,你可以在添加测试项目后删除它们)

那么为什么它不适用于普通的类库? 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测试的项目。据我所知,这些guid总是相同的,[至少给出相同版本的VS],所以你应该能够将该行粘贴到任何.csproj文件中,让VS识别内部的测试。

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

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