Выполнение MSTest с использованием MSBuild - PullRequest
0 голосов
/ 23 января 2020

Я использую MSbuild для сборки и развертывания. NET 4.6.2 проекта. У меня есть Main.proj файл со следующей конфигурацией

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
    <PublishProfileName>$(Configuration).pubxml</PublishProfileName>
    <IntegrationDomainOutput>$(MSBuildThisFileDirectory)BuildOutput\</IntegrationDomainOutput>
    <VisualStudioVersion>14.0</VisualStudioVersion>
    <Framework40Dir>C:\Windows\Microsoft.NET\Framework64\v4.0.30319</Framework40Dir>
  </PropertyGroup>


  <Target Name="Main" DependsOnTargets="Clean">
    <!--<Error Condition="$(SchedulerServiceDestinationFolder)==''" Text="'SchedulerServiceDestinationFolder' property is missing." />-->   
    <CallTarget Targets="BuildAndDeployApi;" />
  </Target>  

  <Target Name="Clean">
    <RemoveDir Directories="$(IntegrationDomainOutput)"/>
  </Target>

  <Target Name="BuildAndDeployApi">
    <MSBuild Projects="$(MSBuildThisFileDirectory)IntegrationDomain.sln"
             Properties="Configuration=$(Configuration);
                         DeployOnBuild=true;
                         PublishProfile=$(PublishProfileName);
                         OutDir=$(IntegrationDomainOutput);
                         VisualStudioVersion=$(VisualStudioVersion);
                         Framework40Dir=$(Framework40Dir)"
             Targets="Build"/>
  </Target>
</Project>

У меня также есть соответствующий .pubxml файл для каждой среды.

В Jenkins тогда я просто запускаю windows command msbuild Main.proj /p:Configuration=development который строит и развертывает проект.

Теперь я хочу выполнить модульные тесты после сборки, но до развертывания. При сборке Main.proj файл проекта модульного теста Domain.UnitTests.dll копируется в $(ItegrationDomainOutput) путь.

Соответствующая команда mstest для выполнения модульных тестов:

mstest /testcontainer:$(ItegrationDomainOutput)\Domain.UnitTests.dll /resultsfile:TestResults.trx

Однако я не уверен, как выполнить эту команду после сборки, но до развертывания

ОБНОВЛЕНИЕ 1
Там это AfterBuild и AfterCompile предопределенные цели, которые мы можем переопределить. В соответствии с документами я обновил мой файл proj. У меня есть переопределение AfterCompile target, а затем обновленный Build атрибут DependsOnTargets target.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

  ... This part is same as original
  ... Removed for Brevity purpose 

  <Target Name="Build" DependsOnTargets="AfterCompile"/>

  <Target Name="BuildAndDeployApi">
    <MSBuild Projects="$(MSBuildThisFileDirectory)IntegrationDomain.sln"
             Properties="Configuration=$(Configuration);
                         DeployOnBuild=true;
                         PublishProfile=$(PublishProfileName);
                         OutDir=$(IntegrationDomainOutput);
                         VisualStudioVersion=$(VisualStudioVersion);
                         Framework40Dir=$(Framework40Dir)"
             Targets="Build"/>
  </Target>  

  <Target Name="AfterCompile">
    <!--Run MSTest.exe-->  
      <Exec Command="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\mstest.exe /testcontainer:$(IntegrationDomainOutput)\Domain.UnitTests.dll" >       
      </Exec> 
  </Target>

</Project>

Однако AfterCompile target никогда не будет выполнен

...