Click here to Skip to main content
Click here to Skip to main content

Integrating Visual Studio Team System 2008 Unit Tests with CruiseControl.NET

By , 17 Apr 2008
 

Introduction

Recently I had to work on a project that used VSTS unit tests and we needed to integrate the tests into our continuous integration process. We were using cruise control.NET. After doing a lot of research on the Web, I decided to write this small article since there is little information on the subject. This article assumes that you have already created a working continuous integration environment with CCNET for your Visual Studio 2008 project.

Executing the Unit Tests

You can use the command line test runner tool MSTest.exe to run your unit tests from CCNET. This requires that you install Visual Studio 2008 on the continuous integration server.

For example, the following command line can be used to execute the unit tests contained in the TestAssembly.dll and store the test results into results.xml.

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

One problem with MSTest is that it complains if the results file already exists. To avoid this, you have to delete the results file before calling MSTest. We can create a batch file in the projects working directory to do this, let’s call it RunTests.bat.

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

You need to replace <PathToTestProject> with the absolute path of your unit test project and make sure the path to MSTest.exe is added to the system path. Everytime this batch file runs, it will delete the results.xml in the working directory and call MSTest that in turn will run the tests and create a new results file.

Now we need to call this batch file from CCNET. Open your ccnet.config file and insert an exec task just after the msbuild task that builds your project as given below:

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

Including the Results in the Build Report

First we need to merge the results.xml file to the build log. To do that, update the publishers section of the ccnet.config file as given below:

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

To include the unit test results in the build report, we need XSL files to generate the appropriate HTML. Unfortunately the XSL files supplied with CruiseControl as of version 1.4.0.3172 do not support the output format generated by MSTest version 9. I have created 2 XSL files called MSTest9Report.xsl and MSTest9Summary.xsl that are available in the download. These files are based on the MSTestReport.xsl and MSTestSummary.xsl distributed with CCNET version 1.4.0.3172.

Download and copy the files to the \CruiseControl.NET\server\xsl folder and \CruiseControl.NET\webdashboard\xsl folders. Then modify the ccservice.exe.config (or ccnet.exe.config if you use ccnet.exe instead of the ccservice) file by modifying the xslFiles section as given below:

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

In the above section, I have removed the unittests.xsl which is there by default and added mstest9summary.xsl instead.

Now we need to configure the Web dashboard. Open the dashboard.config file and update the buildPlugins section as given below:

   <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"/>  

Again, I have removed the unittestsummary.xsl and added mstest9summary instead. The new xslReportBuildPlugin element causes a link to be displayed on the left side called “MSTest Report”, and when clicked it will display the detailed test results in a table.

Conclusion

That's it, now restart your ccservice and your VSTS unit tests should be fully integrated with cruise control. The XSL files supplied displays the Test Name, Outcome, Duration, Message and the Stack Trace but they can be easily modified to display additional information available in the test results.

History

  • 17th April, 2008: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

chamindu
Software Developer
Sri Lanka Sri Lanka
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Questionw VS 2010memberStephenSalsero27 Jan '12 - 12:27 
AnswerRe: w VS 2010memberStephenSalsero30 Jan '12 - 16:03 
GeneralNUnit and MsTests on the same CruiseControlmemberABlokha7718 Feb '11 - 2:39 
GeneralRe: NUnit and MsTests on the same CruiseControlmemberchamindu19 Feb '11 - 2:38 
GeneralGREAT!memberMichel.Net17 Sep '10 - 4:08 
GeneralRe: GREAT!memberMichel.Net17 Sep '10 - 4:09 
GeneralRe: GREAT!memberchamindu20 Sep '10 - 19:06 
GeneralGoodmemberAlanLiuhua10 Feb '10 - 22:28 
Thank you.
GeneralTop Article!memberKazMaxLtd8 Jan '10 - 2:59 
GeneralRe: Top Article!memberchamindu20 Sep '10 - 19:07 
Generalvery goodmemberDonsw3 May '09 - 16:39 
QuestionVery Coolmembernovocaine16 Apr '09 - 12:39 
GeneralIssue with CruiseControl WebDashboardmemberjaanuforabdi30 Dec '08 - 3:12 
GeneralConfiguring Multiple VSTS Test Projects for Reporting in CruiseControl.NETmemberskingaby20 Aug '08 - 12:54 
GeneralRe: Configuring Multiple VSTS Test Projects for Reporting in CruiseControl.NETmemberbflecht23 Feb '09 - 4:24 
GeneralRe: Configuring Multiple VSTS Test Projects for Reporting in CruiseControl.NETmemberKazMaxLtd9 Jan '10 - 0:31 
GeneralRe: Configuring Multiple VSTS Test Projects for Reporting in CruiseControl.NETmemberKazMaxLtd9 Jan '10 - 0:44 
GeneralVery helpfulmemberPaul VR12 Aug '08 - 13:58 
Questionwill this work for VS2005 as well?memberMJJT25 Jul '08 - 13:41 
GeneralJust What the Dr. Orderedmemberivolved14 Jul '08 - 18:37 
GeneralRe: Just What the Dr. Orderedmemberchamindu14 Jul '08 - 20:20 
QuestionReference to MsTest9Report.xsl instead of MsTestReport.xsl?memberMilzit14 Jul '08 - 17:07 
AnswerRe: Reference to MsTest9Report.xsl instead of MsTestReport.xsl?memberchamindu14 Jul '08 - 20:20 
GeneralRe: Reference to MsTest9Report.xsl instead of MsTestReport.xsl?memberMilzit15 Jul '08 - 6:51 
GeneralGreat ArticlememberDaniel Fuller3 Jul '08 - 18:40 
GeneralRe: Great Articlememberchamindu3 Jul '08 - 21:30 
GeneralGood JobmemberMember 431746723 Jun '08 - 19:54 
GeneralIssue with running MSTest with CC.NETmemberxxpatanaxx30 May '08 - 14:06 
GeneralCruiseControl v.s. CruiseControl.NETmemberOrri Eiriksson14 May '08 - 12:00 
GeneralRe: CruiseControl v.s. CruiseControl.NETmemberntrunnermc3 Jul '08 - 10:18 
GeneralGreat helpmemberRameshVasu30 Apr '08 - 10:50 
GeneralRe: Great helpmemberchamindu15 May '08 - 0:24 
GeneralThanks for that.memberDerek Knight26 Apr '08 - 19:46 
GeneralRe: Thanks for that.memberchamindu27 Apr '08 - 16:58 
GeneralAwesome - thanks!memberSteve Michelotti25 Apr '08 - 7:47 
GeneralRe: Awesome - thanks!memberchamindu27 Apr '08 - 16:59 
GeneralGood workmembersurangac24 Apr '08 - 21:32 
NewsConverting VS2008 unit tests to NUnit testsmemberTuomas Hietanen23 Apr '08 - 4:28 
GeneralRe: Converting VS2008 unit tests to NUnit testsmemberchamindu24 Apr '08 - 21:13 
QuestionWhat about with a CruiseControl.NET?memberPhilip Ratcliff (Tenet Group)22 Apr '08 - 22:26 
GeneralRe: What about with a CruiseControl.NET?memberchamindu23 Apr '08 - 20:37 
GeneralPretty Nicememberreal_harami21 Apr '08 - 2:01 
GeneralRe: Pretty Nicememberchamindu27 Apr '08 - 17:01 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130516.1 | Last Updated 17 Apr 2008
Article Copyright 2008 by chamindu
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid