2

我们正在从MSTests迁移到NUnit。第一步是要迁移的是使用下面的MSBuild任务来完成我们所有的单元测试项目:MSBuild:在NUnit任务运行之前复制相关性文件

<Target Name="RunTests"> 

    <!-- The location of the necessary tools to run nunit tests --> 
    <PropertyGroup> 
     <NUnitToolPath>C:\Program Files\NUnit 2.5.2\bin\net-2.0</NUnitToolPath> 
     <NUnitResultTool>C:\Program Files\NUnit For Team Build Version 1.2</NUnitResultTool> 
    </PropertyGroup> 

    <!-- Create a build step representing running nunit tests --> 
    <BuildStep TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" Name="NUnitTestStep" Message="Running Nunit Tests"> 
     <Output TaskParameter="Id" PropertyName="NUnitStepId" /> 
    </BuildStep> 

    <!-- Specify which dll's to include when running tests --> 
    <CreateItem Include="$(OutDir)\Profdoc.UnitTests*.dll"> 
     <Output TaskParameter="Include" ItemName="TestAssembly" /> 
    </CreateItem> 

    <NUnit 
     Assemblies="@(TestAssembly)" 
     ToolPath="$(NUnitToolPath)" 
     OutputXmlFile="$(OutDir)\NUnit_TestResults.xml" 
     ContinueOnError="true"> 
     <Output TaskParameter="ExitCode" PropertyName="NUnitResult" /> 
    </NUnit> 

    <!-- Update the build step result based on the output from the NUnit task --> 
    <BuildStep Condition="'$(NUnitResult)'=='0'" TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" Id="$(NUnitStepId)" Status="Succeeded" /> 
    <BuildStep Condition="'$(NUnitResult)'!='0'" TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)" Id="$(NUnitStepId)" Status="Failed" /> 

    <!-- Upload the results to TFS. --> 
    <Exec Command="&quot;$(NUnitResultTool)\NUnitTFS.exe&quot; -n &quot;$(OutDir)\NUnit_TestResults.xml&quot; -t &quot;$(TeamProject)&quot; -b &quot;$(BuildNumber)&quot; -f &quot;%(ConfigurationToBuild.FlavorToBuild)&quot; -p &quot;%(ConfigurationToBuild.PlatformToBuild)&quot; -x &quot;$(NUnitResultTool)\NUnitToMSTest.xslt&quot;" /> 

    <!-- Indicate build failure if any tests failed --> 
    <Error Condition="'$(NUnitResult)'!='0'" Text="Unit Tests Failed" /> 
</Target> 

但我在茫然,我们将如何实现与出集成测试一样,因为我们在运行测试之前需要将设置和许可证文件部署到二进制文件夹。那么,如何将文件部署到二进制文件夹,最好是作为NUnit任务的一部分(因为我想针对不同的配置设置运行IntegrationTest)?

回答

3

我建议创建一个新的目标,这将复制所有必需的文件,使目标RunTests依赖于新的,基本上是:

<PropertyGroup> 
    <LicenseFiles>$(PathToLicenseFiles)\**\*.lcx</LicenseFiles> 
    <SettingsFiles>$(PathToConfigFiles)\**\*.config</SettingsFiles> 
</PropertyGroup> 

<ItemGroup> 
    <Files Include="$(LicenseFiles);$(SettingsFiles)" 
      Exclude="*.tmp"/> 
</ItemGroup> 

<Target Name="CopyDependencyFiles"> 
    <CopyFiles Inputs="@(Files)" Outputs="..." /> 
</Target> 

<!-- Run Integration tests after all files were copied --> 
<Target Name="RunIntegrationTests" DependsOnTargets="CopyDependencyFiles"> 
    <NUnit .. /> 
</Target>