MSTest + MSBuild + 许多测试项目

3
我负责维护一个大型项目的msbuild脚本。 该解决方案包含约90个项目,每个项目都有自己的测试项目。
作为构建过程的一部分,所有测试项目都被聚合起来,然后调用mstest。
mstest /textcontainer:project1 /testcontainer:project2 ...

由于构建的命令长度已经超过了单个命令的最大长度,因此这不再是一个可行的解决方案。

我们有几个选择:

  1. 创建自定义任务,在逻辑位置上拆分项目列表,然后调用mstest两次。
  2. 为每个测试项目调用一次mstest。

这两种选项有什么优缺点?或者可能有其他替代方案吗?注意:我没有能够更改项目体系结构的能力,只能更改构建脚本。

2个回答

0
也许已经太晚了,我认为你在一年内有时间处理这个问题……但以防万一:
a) 不要为每个项目单独设置一个测试项目,而是将所有测试放在一个单独的项目中(如果需要,可以再建立一个项目用于单元测试和集成测试的分开运行)。这样可以减少(折半)项目的数量。
b) 如果不可行,则在tfsbuild.proj文件中应该有一个名为TEST ARGUMENTS的部分。你可以添加一个ItemGroup。下面是我在我的项目中使用的一个示例:
<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>

0
注意:我对MSTest不熟悉,但对构建自动化有一定了解。
运行所有测试用例的单个测试运行器的原因:
- 更容易在一个地方通过/失败构建。 - 避免多次生成测试运行器的开销。 - 报告工具可能需要将所有测试结果放在一个位置(文件)中进行单一报告。
每个测试用例都使用自己的测试运行器运行的原因:
- 对于测试项目来说,配置更简单。 - 更容易/更快地重新运行给定的一组测试用例。 - 测试运行器可以分布在多台服务器上以加快测试速度。
只要您能将所有测试结果聚合到一个报告中,或者这对您的团队没有影响,我建议尽可能细分(如果可行,每个测试项目使用一个测试运行器)。
如果您购买了整个MS Team Foundation Server和MS Test Manager工具集,我认为它将支持广泛的测试选项;其他框架如Gallio可能更适合您的需求,成本和开销也相对较低。
参考资料

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接