MSTest + MSBuild +许多测试项目

时间:2010-07-13 10:36:42

标签: unit-testing msbuild mstest

我负责维护大型项目的msbuild脚本。 该解决方案包含大约90个项目,每个项目都有自己的测试项目。

作为构建过程的一部分,所有测试项目都会被聚集,并且会调用mstest一次:

mstest /textcontainer:project1 /testcontainer:project2 ...

这不再是一个可行的解决方案,因为构造的命令现在大约有12,000个字符,超过了单个命令的最大长度。

我们有几种选择:

  1. 创建自定义任务以在逻辑位置拆分项目列表并调用mstest两次。
  2. 为每个测试项目调用mstest一次。
  3. 这两种选择都有任何优势/劣势吗?或者可能是替代方案?注意:我无法更改项目体系结构,只能更改构建脚本。

2 个答案:

答案 0 :(得分:0)

警告:我不熟悉MSTest,但一般都是构建自动化。

从单个测试运行器运行所有测试的原因

  • 更容易在一个位置传递/失败构建。
  • 避免多次产生测试运行器的开销。
  • 报告工具可能希望将单个位置(文件)中的所有测试结果用于单个报告。

从自己的测试运行器运行每个测试的原因

  • 测试项目的简单配置。
  • 更容易/更快地重新运行一组给定的测试。
  • 测试运行器可以分布在多个服务器上以加速测试。

只要您可以将所有测试结果汇总到与您的团队无关的单个报告 OR 中,我建议尽可能精确地将事情分开(至少一个)每个测试项目的测试运行器,如果可行的话)。

如果您购买了整个MS Team Foundation Server和MS Test Manager工具集,我认为它将支持广泛的测试选项;其他框架,如Gallio可能会满足您的需求,而不需要太多的成本或开销。

<强>参考

答案 1 :(得分: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>