StatLight

StatLight is an open-source test runner that can execute Silverlight unit tests and report results as an XML file. It supports tests decorated using MSTest attributes, used as default by Silverlight Unit Testing Framework, and can generate results file in the MS Test format.

Some other most important features:

Links

Project website: http://statlight.codeplex.com/.
License: Microsoft Public License (http://statlight.codeplex.com/license)
Integrating StatLight with TFS test system: http://www.nielshebling.de/?p=167

Samples

Running from command line

StatLight.exe -x bin\debug\SilverMindMap.Core.Tests.xap

Using Chrome or Firefox to run tests

StatLight.exe -x bin\debug\SilverMindMap.Core.Tests.xap -b=Chrome
StatLight.exe -x bin\debug\SilverMindMap.Core.Tests.xap -b=Firefox

Running only tests with tag "Priority0"

StatLight.exe -x bin\debug\SilverMindMap.Core.Tests.xap -t=Priority0

Integration with MsBuild

You can use the Exec task to execute StatLight.exe and run you unit tests. The Silver Mind Map project defines a new Target that uses StatLight to run unit tests:
  <!-- 
    This target runs unit tests created with Silverlight Unit Test Framework 
    Used properties:
      TestXapFile:    path to the XAP file with unit tests
      TestResultFile: path where the XML result file will be saved.
      TagFilters:     (optional) additional tag filter expression for the Silverlight Unit Test Framework.
      
    This target succeeds only when all tests pass.
  -->
<Target Name="RunUnitTests"
          Inputs="$(TestXapFile)"
          Outputs="$(TestResultsDir)\$(TestResultFile)">
    <PropertyGroup>
      <TagFiltersArgument Condition="'$(TagFilters)' != ''">-t=$(TagFilters)</TagFiltersArgument>
      <XapFileArgument>-x=$(TestXapFile)</XapFileArgument>
      <ResultFileArgument>-r=$(TestResultFile)</ResultFileArgument>
      
      <StatLightCommandLine>$(StatLightPath) $(XapFileArgument) $(ResultFileArgument) $(TagFiltersArgument)</StatLightCommandLine>
    </PropertyGroup>
    
    <Exec Command="$(StatLightCommandLine)" ContinueOnError="false"/>
</Target>

This task is invoked after each build of the SilverMindMap.Tests.targets. Notice the TagFilters property - in this case, it is used to run only tests tagged as BVT after each build.

<!-- Properties used by unit tests -->
<PropertyGroup>
    <TestXapFile>$(OutputPath)\$(XapFilename)</TestXapFile>
    <TestResultFile>$(TestResultsDir)\$(AssemblyName).results.xml</TestResultFile>
    <TagFilters Condition="'$(TagFilters)' == ''">BVT</TagFilters>
</PropertyGroup>

<!-- Extending the Build target and running Priority0 unit tests after each build -->
<Import Project="$(SolutionDir)\BuildScripts\SilverMindMap.Tests.targets" />  
<PropertyGroup>
    <BuildDependsOn>
      $(BuildDependsOn);
      RunUnitTests
    </BuildDependsOn>
</PropertyGroup>