65.9K
CodeProject 正在变化。 阅读更多。
Home

将 Visual Studio Team System 2008 单元测试与 CruiseControl.NET 集成

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.53/5 (22投票s)

2008年4月17日

CPOL

3分钟阅读

viewsIcon

155896

downloadIcon

448

解释了如何将 Visual Studio 2008 单元测试与 CCNET 生成过程集成。

引言

最近,我不得不处理一个使用 VSTS 单元测试的项目,我们需要将这些测试集成到我们的持续集成过程中。我们使用 cruise control.NET。在对 Web 进行大量研究之后,我决定写这篇文章,因为关于这个主题的信息很少。本文假设您已经为您的 Visual Studio 2008 项目创建了一个可用的持续集成环境,使用 CCNET。

执行单元测试

您可以使用命令行测试运行器工具 MSTest.exe 从 CCNET 运行您的单元测试。这要求您在持续集成服务器上安装 Visual Studio 2008。

例如,可以使用以下命令行来执行包含在 TestAssembly.dll 中的单元测试,并将测试结果存储到 results.xml 中。

MSTest.exe /testcontainer:TestAssembly.dll
/resultsfile:results.xml 

MSTest的一个问题是,如果结果文件已经存在,它会报错。为了避免这种情况,您必须在调用MSTest之前删除结果文件。我们可以在项目的工作目录中创建一个批处理文件来执行此操作,我们将其命名为 RunTests.bat

del results.xml
MSTest.exe /testcontainer:<PathtoTestProject>\Bin\Debug\TestAssembly.dll
/resultsfile:results.xml

您需要将<PathToTestProject>替换为您的单元测试项目的绝对路径,并确保将 MSTest.exe 的路径添加到系统路径中。每次运行此批处理文件时,它将删除工作目录中的 results.xml,并调用MSTest,进而运行测试并创建一个新的结果文件。

现在我们需要从 CCNET 调用此批处理文件。打开您的 ccnet.config 文件并在构建您的项目后,在 msbuild 任务之后插入一个 exec 任务,如下所示

<tasks>
    <msbuild>...</msbuild>
    <exec> 
        <executable>{WorkingDirectory}\RunTests.bat</executable>
        <baseDirectory>{WorkingDirectory}</baseDirectory>
    </exec>
</tasks>

将结果包含在构建报告中

首先,我们需要将 results.xml 文件合并到构建日志中。为此,请更新 ccnet.config 文件的发布者部分,如下所示

<publishers> 
    <merge>
    <files>
        <file>{WorkingDirectory}\results.xml</file>
    </files> 
    </merge>
    ... 
</publishers> 

要将单元测试结果包含在构建报告中,我们需要 XSL 文件来生成相应的 HTML。不幸的是,CruiseControl随版本 1.4.0.3172 提供的 XSL 文件不支持由MSTest版本 9 生成的输出格式。我创建了 2 个名为 MSTest9Report.xslMSTest9Summary.xsl 的 XSL 文件,这些文件可在下载中找到。这些文件基于 CCNET 版本 1.4.0.3172 附带的 MSTestReport.xslMSTestSummary.xsl

下载并将文件复制到 \CruiseControl.NET\server\xsl 文件夹和 \CruiseControl.NET\webdashboard\xsl 文件夹。然后通过修改 xslFiles 部分来修改 ccservice.exe.config(或者如果您使用 ccnet.exe 而不是 ccservice,则修改 ccnet.exe.config)文件,如下所示

<xslFiles>
    <file name="xsl\header.xsl"/>
    <file name="xsl\compile.xsl"/>
    <file name="xsl\mstest9summary.xsl"/>
    <file name="xsl\modifications.xsl"/>
</xslFiles>

在上面的部分中,我删除了默认存在的 unittests.xsl,并添加了 mstest9summary.xsl

现在我们需要配置 Web 仪表板。打开 dashboard.config 文件并更新 buildPlugins 部分,如下所示

   <buildPlugins>
      <buildReportBuildPlugin>
        <xslFileNames>
          <xslFile>xsl\header.xsl</xslFile>
          <xslFile>xsl\modifications.xsl</xslFile>
          <xslFile>xsl\compile.xsl</xslFile>
          <xslFile>xsl\MsTest9Summary.xsl</xslFile>
          <xslFile>xsl\fxcop-summary.xsl</xslFile>
          <xslFile>xsl\NCoverSummary.xsl</xslFile>
          <xslFile>xsl\SimianSummary.xsl</xslFile>
          <xslFile>xsl\fitnesse.xsl</xslFile>
        </xslFileNames>
      </buildReportBuildPlugin>
      <buildLogBuildPlugin />

      <xslReportBuildPlugin description="MSTest Report" actionName="MSTESTReport" 
            xslFileName="xsl\MsTestReport.xsl"/>  

同样,我删除了 unittestsummary.xsl 并添加了 mstest9summary。新的 xslReportBuildPlugin 元素导致在左侧显示一个名为“MSTest Report”的链接,单击它将以表格形式显示详细的测试结果。

结论

就这样,现在重新启动您的 ccservice,您的 VSTS 单元测试应该与 cruise control 完全集成。提供的 XSL 文件显示了测试名称、结果、持续时间、消息和堆栈跟踪,但它们可以很容易地修改以显示测试结果中可用的附加信息。

历史

  • 2008 年 4 月 17 日:初始发布
© . All rights reserved.