<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Something Pithy - testing tag</title>
  <link>http://donie.homeip.net:8080/pebble/Steve/tags/testing/</link>
  <description>my geekness knows no bounds</description>
  <language>en</language>
  <copyright>Steve Donie</copyright>
  <lastBuildDate>Thu, 08 May 2008 15:10:56 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>even more FitNesse GoodNesse</title>
    <link>http://donie.homeip.net:8080/pebble/Steve/2006/04/13/1144982429113.html</link>
    
      
        <description>
          &lt;p class=&#034;paragraph&#034;/&gt;We ran into a little hitch not too long ago with our fitnesse tests. We 
are now up to 4 different suites of fitnesse tests, one for each of 4 different 
solutions. The solution have dependencies among themsleves. We had been doing 
work on one solution, doing our TDD red-green-refactor and our fitnesse 
equivalent. Moving along nicely. And then cam a day and we had to do some work 
on a different solution that we hadn&#039;t made any changes to in a few weeks. Made 
some simple changes, checked them in, and (as described &lt;span class=&#034;nobr&#034;&gt;&lt;a href=&#034;in a few&#034;&gt;&amp;#105;n a few&lt;/a&gt;&lt;/span&gt; 
&lt;span class=&#034;nobr&#034;&gt;&lt;a href=&#034;http://codebetter.com/blogs/jeffrey.palermo/archive/2005/09/13/131914.aspx
&#034;&gt;previous 
posts&lt;/a&gt;&lt;/span&gt;) our CC.net build kicked off, followed by the fitnesse tests for that project. 
What surprised us was that the fitnesse tests broke. In a strange place. Turns 
out we had an integration breakage. Changes to project B had caused the fitnesse 
tests in project A to fail, and we hadn&#039;t noticed since those tests hadn&#039;t been 
run in a couple of weeks. So after we got the tests passing, we resolved to set 
up a system to keep us from going that long with breakages we didn&#039;t know about.&lt;p class=&#034;paragraph&#034;/&gt;I set up a new project in my ccnet.config file like this:&lt;p class=&#034;paragraph&#034;/&gt;&lt;div class=&#034;code&#034;&gt;&lt;pre&gt;&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;project name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;nightly_fitnesse&#034;&lt;/span&gt;&amp;#62;&lt;/span&gt;
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;webURL&amp;#62;&lt;/span&gt;&lt;span class=&#034;nobr&#034;&gt;&lt;a href=&#034;http://buildserver/ccnet/Controller.aspx?_action_ViewProjectReport=true&amp;#38;#38;amp;server=buildserver&amp;#38;#38;amp;project=nightly_fitnesse&#034;&gt;&amp;#104;ttp://buildserver/ccnet/Controller.aspx?_action_ViewProjectReport=true&amp;#38;amp;server=buildserver&amp;#38;amp;project=nightly_fitnesse&lt;/a&gt;&lt;/span&gt;&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/webURL&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;triggers&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;scheduleTrigger time=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;23:30&#034;&lt;/span&gt; buildCondition=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;ForceBuild&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/triggers&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;sourcecontrol type=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;svn&#034;&lt;/span&gt;&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;executable&amp;#62;&lt;/span&gt;c:&amp;#112;rogram files&amp;#115;ubversion&amp;#98;in&amp;#115;vn.exe&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/executable&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;trunkUrl&amp;#62;&lt;/span&gt;svn://codeserver/fitnesse/trunk/&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/trunkUrl&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;tagBaseUrl&amp;#62;&lt;/span&gt;svn://codeserver/fitnesse/tags/&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/tagBaseUrl&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;workingDirectory&amp;#62;&lt;/span&gt;d:&amp;#119;ork&amp;#102;itnesse&amp;#45;trunk&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/workingDirectory&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;tagOnSuccess&amp;#62;&lt;/span&gt;false&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/tagOnSuccess&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;autoGetSource&amp;#62;&lt;/span&gt;true&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/autoGetSource&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;username&amp;#62;&lt;/span&gt;cruisecontrol.net&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/username&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;password&amp;#62;&lt;/span&gt;ccnetpassword&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/password&amp;#62;&lt;/span&gt;
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/sourcecontrol&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;tasks&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;nant&amp;#62;&lt;/span&gt;
          &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;executable&amp;#62;&lt;/span&gt;D:&amp;#119;ork&amp;#100;ependencies&amp;#45;trunk&amp;#101;xternal&amp;#110;ant&amp;#78;Ant.exe&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/executable&amp;#62;&lt;/span&gt;
          &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;baseDirectory&amp;#62;&lt;/span&gt;d:&amp;#119;ork&amp;#102;itnesse&amp;#45;trunk&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/baseDirectory&amp;#62;&lt;/span&gt;
          &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;buildFile&amp;#62;&lt;/span&gt;AustinNightlyFitnesse.build&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/buildFile&amp;#62;&lt;/span&gt;
          &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;targetList&amp;#62;&lt;/span&gt;
            &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;target&amp;#62;&lt;/span&gt;fit&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/target&amp;#62;&lt;/span&gt;
          &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/targetList&amp;#62;&lt;/span&gt;
          &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;!&amp;#45;&amp;#45; this build timeout is fairly long, since these tests can get long.  &amp;#45;&amp;#45;&amp;#62;&lt;/span&gt;
          &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;buildTimeoutSeconds&amp;#62;&lt;/span&gt;1500&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/buildTimeoutSeconds&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/nant&amp;#62;&lt;/span&gt;
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/tasks&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;publishers&amp;#62;&lt;/span&gt;
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;merge&amp;#62;&lt;/span&gt;
          &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;files&amp;#62;&lt;/span&gt;
             &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;file&amp;#62;&lt;/span&gt;D:&amp;#119;ork&amp;#102;itnesse&amp;#45;trunk&amp;#114;esults&amp;#42;.xml&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/file&amp;#62;&lt;/span&gt;
          &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/files&amp;#62;&lt;/span&gt;
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/merge&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;xmllogger /&amp;#62;&lt;/span&gt;
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/publishers&amp;#62;&lt;/span&gt;
    &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/project&amp;#62;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p class=&#034;paragraph&#034;/&gt;We set up a new build file to run all 4 fitnesse suites - the parts that we call the &#039;regression&#039; suite, which we expect
to always pass. As you can see in the trigger block, it runs every night at 11:30, whether there have been any code changes or not.
The build file is where I think the interesting bits are.&lt;p class=&#034;paragraph&#034;/&gt;&lt;div class=&#034;code&#034;&gt;&lt;pre&gt;&lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;?xml version=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;1.0&#034;&lt;/span&gt; encoding=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;utf&amp;#45;8&#034;&lt;/span&gt; ?&amp;#62;&lt;/span&gt;
  &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;project name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;AustinNightlyFitnesse&#034;&lt;/span&gt; default=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fit&#034;&lt;/span&gt; xmlns=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;http://nant.sf.net/release/0.85&amp;#45;rc3/nant.xsd&#034;&lt;/span&gt;&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fit.server&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;localhost&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fit.port&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;8080&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;results.dir&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;results&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;  
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;target name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fit&#034;&lt;/span&gt;	description=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;run fit tests&#034;&lt;/span&gt;&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;FitRegressionFailureSummary&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;0&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;delete dir=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;$&amp;#123;results.dir&amp;#125;&#034;&lt;/span&gt; failonerror=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;false&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;mkdir dir=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;$&amp;#123;results.dir&amp;#125;&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fit.suite&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;GuideEngine.SuiteRegressionTests&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fitlibs.dir&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;c:&amp;#102;itnesse&amp;#100;otnet&amp;#71;uideEngine&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;call target=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;runFitSuite&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fit.suite&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;LookupWeb.SuiteRegressionTests&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fitlibs.dir&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;c:&amp;#102;itnesse&amp;#100;otnet&amp;#76;ookupWeb&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;call target=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;runFitSuite&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fit.suite&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;FireFly.SuiteRegressionTests&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fitlibs.dir&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;c:&amp;#102;itnesse&amp;#100;otnet&amp;#70;ireFly&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;call target=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;runFitSuite&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fit.suite&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;ShareDoc.SuiteRegressionTests&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fitlibs.dir&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;c:&amp;#102;itnesse&amp;#100;otnet&amp;#83;hareDoc&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;call target=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;runFitSuite&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;fail message=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;$&amp;#123;FitRegressionFailureSummary&amp;#125; Fitnesse Regression test(s) failed.&#034;&lt;/span&gt;
          if=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;$&amp;#123;int::parse(property::get&amp;#45;value(&#039;FitRegressionFailureSummary&#039;)) != 0&amp;#125;&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/target&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;target name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;runFitSuite&#034;&lt;/span&gt; &amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;!&amp;#45;&amp;#45; same basic steps, but these must all pass, or the build fails &amp;#45;&amp;#45;&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;fit.testrunner&#034;&lt;/span&gt; value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;$&amp;#123;fitlibs.dir&amp;#125;&amp;#84;estRunner.exe&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;echo message=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;running fit regression tests at &lt;span class=&#034;nobr&#034;&gt;&lt;a href=&#034;http://$&amp;#38;#123;fit.server&amp;#38;#125;:$&amp;#38;#123;fit.port&amp;#38;#125;/$&amp;#38;#123;fit.suite&amp;#38;#125;&#034;&gt;&amp;#104;ttp://$&amp;#123;fit.server&amp;#125;:$&amp;#123;fit.port&amp;#125;/$&amp;#123;fit.suite&amp;#125;&lt;/a&gt;&lt;/span&gt; using $&amp;#123;fit.testrunner&amp;#125;&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;exec program=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;$&amp;#123;fit.testrunner&amp;#125;&#034;&lt;/span&gt;
              commandline=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;&amp;#45;results $&amp;#123;results.dir&amp;#125;&amp;#70;it&amp;#45;$&amp;#123;fit.suite&amp;#125;.html $&amp;#123;fit.server&amp;#125; $&amp;#123;fit.port&amp;#125; $&amp;#123;fit.suite&amp;#125;&#034;&lt;/span&gt; 
              failonerror=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;false&#034;&lt;/span&gt; resultproperty=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;FitRegressionResult&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;!&amp;#45;&amp;#45; now transform those results from html to xml, and then fail if there were any errors. Fitnesse helpfully returns that as a number. &amp;#45;&amp;#45;&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;exec program=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;java.exe&#034;&lt;/span&gt; 
              commandline=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;&amp;#45;cp bin&amp;#102;itnesse&amp;#102;itnesse.jar fitnesse.runner.FormattingOption $&amp;#123;results.dir&amp;#125;&amp;#70;it&amp;#45;$&amp;#123;fit.suite&amp;#125;.html xml $&amp;#123;results.dir&amp;#125;&amp;#70;it&amp;#45;$&amp;#123;fit.suite&amp;#125;.xml $&amp;#123;fit.server&amp;#125; $&amp;#123;fit.port&amp;#125; $&amp;#123;fit.suite&amp;#125;&#034;&lt;/span&gt; 
              failonerror=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;false&#034;&lt;/span&gt;/&amp;#62;&lt;/span&gt;&lt;p class=&#034;paragraph&#034;/&gt;        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;property name=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;FitRegressionFailureSummary&#034;&lt;/span&gt; 
                            value=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;$&amp;#123;int::parse(property::get&amp;#45;value(&#039;FitRegressionFailureSummary&#039;)) + int::parse(property::get&amp;#45;value(&#039;FitRegressionResult&#039;))&amp;#125;&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;echo message=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;$&amp;#123;FitRegressionResult&amp;#125; Fitnesse Regression test(s) in $&amp;#123;fit.suite&amp;#125; failed.&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
        &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;echo message=&lt;span class=&#034;xml&amp;#45;quote&#034;&gt;&#034;So far, a total of $&amp;#123;FitRegressionFailureSummary&amp;#125; Fitnesse Regression test(s) failed.&#034;&lt;/span&gt; /&amp;#62;&lt;/span&gt;
      &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/target&amp;#62;&lt;/span&gt;
  &lt;span class=&#034;xml&amp;#45;tag&#034;&gt;&amp;#60;/project&amp;#62;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p class=&#034;paragraph&#034;/&gt;
Since properties in nAnt are mutable, it makes it pretty easy to do paramaterized targets. The strangest bit about this build file is how it adds up the number of faiures.
Fitnesse TestRunner is nice enough to return an integer that indicates the number of failures and exceptions. When we exec the TestRunner, we set failonerror
to false, and collect the result into a property. As mentioned before, we use the java tools to format the XML output into html. Then, we do a little nAnt
expression voodoo to add up all the failures, so that failing one suite doesn&#039;t prevent the other suites from running. It is only at the very end
of the &#039;fit&#039; target that we fail with a message if there were any failures in any of the suites. Since we already have the fitnesse-details.xsl stylesheet in place,
we can then see what the problems were right in our CC.Net dashboard.&lt;p class=&#034;paragraph&#034;/&gt;Pretty cool.&lt;p class=&#034;paragraph&#034;/&gt;

        </description>
      
      
    
    
    
    <comments>http://donie.homeip.net:8080/pebble/Steve/2006/04/13/1144982429113.html#comments</comments>
    <guid isPermaLink="true">http://donie.homeip.net:8080/pebble/Steve/2006/04/13/1144982429113.html</guid>
    <pubDate>Fri, 14 Apr 2006 02:40:29 GMT</pubDate>
  </item>
  
  </channel>
</rss>
