我知道这可能某种程度上,因为我们有一个包含可通过VS2010测试运行器运行的MSTest单元测试的项目。我们甚至可以为现有项目添加新的测试方法或类,并且运行器将选择它们并将它们包含在测试运行中。
当我尝试将新的单元测试项目添加到解决方案时,问题出现了。如果我向解决方案添加“测试项目”类型的项目,VS2010将生成测试元数据和设置文件,这些文件在其他项目中运行任何其他测试都不需要。例如,对于OSS项目,这是不合需要的。如果我只是添加一个普通的“类库”项目,并将单元测试放入其中,测试运行器会忽略它们,我根本无法识别它们。
我疯了吗?这是侥幸吗?甚至可以让VS2010运行我们的测试,而不需要.vsmdi文件或.testsettings文件?或者我错过了为新项目工作所需的设置或配置?答案 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文件中的属性。我通常更喜欢属性,因为它们“更接近”代码。