Unit testing MSTest&x2B;MSBuild+;许多测试项目

Unit testing MSTest&x2B;MSBuild+;许多测试项目,unit-testing,msbuild,mstest,Unit Testing,Msbuild,Mstest,我负责维护大型项目的msbuild脚本。 该解决方案包含大约90个项目,每个项目都有自己的测试项目 作为构建过程的一部分,所有测试项目都将被放弃,mstest只调用一次: mstest /textcontainer:project1 /testcontainer:project2 ... 这不再是可行的解决方案,因为构造的命令现在大约有12000个字符长,超过了单个命令的最大长度 我们有几种选择: 创建自定义任务以拆分逻辑位置中的项目列表,并调用mstest两次 为每个测试项目调用mstest

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

作为构建过程的一部分,所有测试项目都将被放弃,mstest只调用一次:

mstest /textcontainer:project1 /testcontainer:project2 ...
这不再是可行的解决方案,因为构造的命令现在大约有12000个字符长,超过了单个命令的最大长度

我们有几种选择:

  • 创建自定义任务以拆分逻辑位置中的项目列表,并调用mstest两次
  • 为每个测试项目调用mstest一次

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

    注意:我不熟悉MSTest,但通常熟悉构建自动化

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

    • 在一个点上更容易通过/失败构建
    • 避免多次生成测试运行程序的开销
    • 报告工具可能希望所有测试结果位于单个报告的单个位置(文件)
    从自己的测试运行程序运行每个测试的原因

    • 测试项目的更简单配置
    • 更容易/更快地重新运行给定的测试集
    • 测试运行程序可以分布在多个服务器上,以加快测试速度
    只要您可以将所有测试结果聚合到一个对您的团队来说无关紧要的报告中,我建议您尽可能精细地进行拆分(如果可行的话,每个测试项目只包含一个测试运行者)

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

    参考资料


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

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

    • 在一个点上更容易通过/失败构建
    • 避免多次生成测试运行程序的开销
    • 报告工具可能希望所有测试结果位于单个报告的单个位置(文件)
    从自己的测试运行程序运行每个测试的原因

    • 测试项目的更简单配置
    • 更容易/更快地重新运行给定的测试集
    • 测试运行程序可以分布在多个服务器上,以加快测试速度
    只要您可以将所有测试结果聚合到一个对您的团队来说无关紧要的报告中,我建议您尽可能精细地进行拆分(如果可行的话,每个测试项目只包含一个测试运行者)

    如果您购买了整个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>