Unit testing MSTest&x2B;MSBuild+;许多测试项目
我负责维护大型项目的msbuild脚本。 该解决方案包含大约90个项目,每个项目都有自己的测试项目 作为构建过程的一部分,所有测试项目都将被放弃,mstest只调用一次:Unit testing MSTest&x2B;MSBuild+;许多测试项目,unit-testing,msbuild,mstest,Unit Testing,Msbuild,Mstest,我负责维护大型项目的msbuild脚本。 该解决方案包含大约90个项目,每个项目都有自己的测试项目 作为构建过程的一部分,所有测试项目都将被放弃,mstest只调用一次: mstest /textcontainer:project1 /testcontainer:project2 ... 这不再是可行的解决方案,因为构造的命令现在大约有12000个字符长,超过了单个命令的最大长度 我们有几种选择: 创建自定义任务以拆分逻辑位置中的项目列表,并调用mstest两次 为每个测试项目调用mstest
mstest /textcontainer:project1 /testcontainer:project2 ...
这不再是可行的解决方案,因为构造的命令现在大约有12000个字符长,超过了单个命令的最大长度
我们有几种选择:
这两种选择都有什么优点/缺点吗?或者可能的替代方案?注意:我没有能力对项目体系结构进行更改,只能更改构建脚本。注意:我不熟悉MSTest,但通常熟悉构建自动化 从单个测试运行程序运行所有测试的原因
- 在一个点上更容易通过/失败构建
- 避免多次生成测试运行程序的开销
- 报告工具可能希望所有测试结果位于单个报告的单个位置(文件)
- 测试项目的更简单配置
- 更容易/更快地重新运行给定的测试集
- 测试运行程序可以分布在多个服务器上,以加快测试速度
如果您购买了整个MS Team Foundation Server和MS测试管理器工具集,我认为它将支持广泛的测试选项;其他框架,比如Gallio,可以满足您的需求,而不需要太多的成本或开销
参考资料- 在一个点上更容易通过/失败构建
- 避免多次生成测试运行程序的开销
- 报告工具可能希望所有测试结果位于单个报告的单个位置(文件)
- 测试项目的更简单配置
- 更容易/更快地重新运行给定的测试集
- 测试运行程序可以分布在多个服务器上,以加快测试速度
如果您购买了整个MS Team Foundation Server和MS测试管理器工具集,我认为它将支持广泛的测试选项;其他框架,比如Gallio,可以满足您的需求,而不需要太多的成本或开销
参考资料- 也许太晚了,我想一年后你就有时间解决这个问题了。。。但以防万一:
a) 不是每个项目都有一个测试项目,而是将所有测试放在一个项目中(如果您想独立于集成测试运行单元测试,可能需要两个)。这样可以减少(一半)项目数量
b) 如果不可能,那么在tfsbuild.proj中应该有一个名为TEST ARGUMENTS的部分。您可以添加一个项目组。以下是我在项目中使用的:
<ItemGroup>
<!-- If Normal build run UnitTests + Integration tests-->
<TestContainer Include="$(OutDir)\Rbi.Viper.Framework.Test.UnitTests.dll" />
<TestContainer Include="$(OutDir)\Rbi.Viper.Services.Test.UnitTests.dll" />
<TestContainer Include="$(OutDir)\Rbi.Viper.Controls.Test.UnitTests.dll" />
<TestContainer Include="$(OutDir)\Rbi.Viper.RestfulServicesMvc.Tests.dll" />
<TestContainer Include="$(OutDir)\Rbi.Viper.Framework.Test.IntegrationTests.dll" />
<TestContainer Include="$(OutDir)\Rbi.Viper.Services.Test.IntegrationTests.dll" />
</ItemGroup>
也许太晚了,我想一年后你就有时间解决这个问题了。。。但以防万一: a) 不是每个项目都有一个测试项目,而是将所有测试放在一个项目中(如果您想独立于集成测试运行单元测试,可能需要两个)。这样可以减少(一半)项目数量 b) 如果不可能,那么在tfsbuild.proj中应该有一个名为TEST ARGUMENTS的部分。您可以添加一个项目组。以下是我在项目中使用的:
<ItemGroup>
<!-- If Normal build run UnitTests + Integration tests-->
<TestContainer Include="$(OutDir)\Rbi.Viper.Framework.Test.UnitTests.dll" />
<TestContainer Include="$(OutDir)\Rbi.Viper.Services.Test.UnitTests.dll" />
<TestContainer Include="$(OutDir)\Rbi.Viper.Controls.Test.UnitTests.dll" />
<TestContainer Include="$(OutDir)\Rbi.Viper.RestfulServicesMvc.Tests.dll" />
<TestContainer Include="$(OutDir)\Rbi.Viper.Framework.Test.IntegrationTests.dll" />
<TestContainer Include="$(OutDir)\Rbi.Viper.Services.Test.IntegrationTests.dll" />
</ItemGroup>