我负责维护大型项目的msbuild脚本。 该解决方案包含大约90个项目,每个项目都有自己的测试项目。
作为构建过程的一部分,所有测试项目都会被聚集,并且会调用mstest一次:
mstest /textcontainer:project1 /testcontainer:project2 ...
这不再是一个可行的解决方案,因为构造的命令现在大约有12,000个字符,超过了单个命令的最大长度。
我们有几种选择:
这两种选择都有任何优势/劣势吗?或者可能是替代方案?注意:我无法更改项目体系结构,只能更改构建脚本。
答案 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>