【问题标题】:Using specific Visual Studio Project Build configuration for running unit tests使用特定的 Visual Studio 项目构建配置来运行单元测试
【发布时间】:2011-09-07 09:29:07
【问题描述】:

我的公司已经有一个 Team Foundation Server 作为持续集成平台。但是,我希望设置的是开发人员可以在他们自己的开发机器上运行的构建配置。

假设我有一个 Visual Studio 解决方案,其中包含一个 .NET C# 类库项目(我将其称为库项目)。它还包含另一个项目,其中包含库项目的单元测试类(我将其称为测试项目)。

我在每个项目和解决方案级别都有正常的调试和发布构建配置。对于这两种配置,我都将其设置为仅构建库项目(因此不会构建测试项目)。

我想做的是设置 2 个新的构建配置,称为 Debug With Testing 和 Release With Testing。它们将分别与 Debug 和 Release 相同,但我需要它们具有以下额外功能:

  1. 构建测试项目。
  2. 运行测试项目中的所有测试用例。
  3. 对库项目运行代码分析。
  4. 为测试和代码分析生成报告。
  5. 将报告保存在特定位置。

执行第 1 项很容易。但是,我不知道如何执行第 2 到第 5 项。谁能指出我正确的方向?

任何帮助将不胜感激。 TIA

【问题讨论】:

    标签: visual-studio-2010 unit-testing buildconfiguration


    【解决方案1】:

    您需要编写自定义的 MS 构建代码,我已经完成了一些类似的任务,如下所示:

    • 从 TFS 获取最新更改
    • 构建包含所有项目的解决方案
    • 在本地部署主数据库
    • 在本地部署测试数据库,其中包含在 数据驱动测试
    • 运行健全性测试或 BVT(构建验证测试) 属于第一类(测试DB与代码的集成)
    • 签入待处理的更改

    听听这个任务的代码

    <Target Name="GetLatestFromTFS2010" AfterTargets="build" >
     <Message Importance="high" Text ="start GetLatest for the project "></Message>
     <Exec Command='"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe" get $/AutoDBand/AutomateDatabaseAndTest/AutomateDatabaseAndTest /recursive /login:YourUsername,YourPassword' ContinueOnError='false'/>
    
     </Target>
     <!--===========Deploy Database============-->
     <Target Name="DeployDatabase" AfterTargets="GetLatestFromTFS2010" Condition="'$(Configuration)' == 'DebugForCheck-in'">
     <Message Importance="high" Text="-------------------------------- Deploying Database according to the connection string -------------------------------- " />
     <Message Importance="high" Text=" "/>
     <MSBuild Projects="..\DB\DB.dbproj" Targets="Build;Deploy" />
     </Target>
    
     <!--============Run the Test==================-->
     <Target Name="UnitTests" AfterTargets="DeployDatabase" Condition="'$(Configuration)' == 'DebugForCheck-in'">
     <Message Importance="high" Text="--------------------------------&nbsp; Running Unit Tests for category 1 only--------------------------------"&nbsp; />
     <Message Importance="high" Text=" "/>
     <Exec Command='"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe" /testcontainer:"..\BLTest\bin\Debug\BLTest.dll" /category:cat1' />
     </Target>
    
     <Target Name="Chekin-pendingChange" AfterTargets="UnitTests" >
     <Message Importance="high" Text ="-------------------------------- start Check-in process-------------------------------- "></Message>
     <Message Importance="high" Text=" "/>
     <Exec Command='"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\TF.exe" checkin $/AutoDBand/AutomateDatabaseAndTest/AutomateDatabaseAndTest /recursive /login:YourUsername,YourPassword' ContinueOnError='false'/>
     </Target>
    

    欲了解更多信息,您可以查看这篇带有源代码的文章 http://mohamedradwan.wordpress.com/2010/11/13/automate-the-best-practice-for-check-in-including-get-latest-deploy-db-run-test-check-in/

    【讨论】:

    【解决方案2】:

    看看类似的东西:

    都是持续集成服务器,可以很好地完成您喜欢做的工作。

    【讨论】:

    • 公司已经拥有一个 Team Foundation Server 作为持续集成平台。但是,我希望设置的是开发人员可以在他们自己的开发机器上运行的构建配置。
    猜你喜欢
    • 2021-01-27
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    • 2015-07-17
    • 1970-01-01
    相关资源
    最近更新 更多