1) Added support to run test from test3 verb for the project targeting multiple TFM

2) Added test to address above change
3) Crossgen were creating problem for full CLR built assemblies. Removed All those assembly from Crossgen list.
4) Removed the line of code which were deleting Extensions folder under sdk folder as this folder contain trx logger dlls
This commit is contained in:
Faizan Ahmad 2016-10-25 20:10:18 +05:30
parent a0ee0f6d94
commit 33caa408a1
8 changed files with 243 additions and 9 deletions

View file

@ -0,0 +1,40 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestNamespace
{
public class Program
{
public static void Main(string[] args)
{
}
}
[TestClass]
public class VSTestTests
{
[TestMethod]
public void VSTestPassTest()
{
}
[TestMethod]
public void VSTestFailTest()
{
Assert.Fail();
}
#if DESKTOP
[TestMethod]
public void VSTestPassTestDesktop()
{
}
#else
[TestMethod]
public void VSTestFailTestNetCoreApp()
{
Assert.Fail();
}
#endif
}
}

View file

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" />
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>net46;netcoreapp1.0</TargetFrameworks>
<OutputPath>bin\$(Configuration)</OutputPath>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp1.0'">
<DefineConstants>NETCOREAPP;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'net46'">
<DefineConstants>DESKTOP;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Compile Include="**\*.cs" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp1.0'">
<PackageReference Include="Microsoft.NETCore.App">
<Version>1.0.1</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk">
<Version>1.0.0-alpha-20161019-1</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="MSTest.TestFramework">
<Version>1.0.5-preview</Version>
</PackageReference>
<PackageReference Include="MSTest.TestAdapter">
<Version>1.1.4-preview</Version>
</PackageReference>
<PackageReference Include="Microsoft.TestPlatform.TestHost">
<Version>15.0.0-preview-20161025-02</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft.CSharp.targets" />
</Project>

View file

@ -21,13 +21,13 @@
<PrivateAssets>All</PrivateAssets>
</PackageReference>
<PackageReference Include="MSTest.TestFramework">
<Version>1.0.4-preview</Version>
<Version>1.0.5-preview</Version>
</PackageReference>
<PackageReference Include="MSTest.TestAdapter">
<Version>1.1.3-preview</Version>
<Version>1.1.4-preview</Version>
</PackageReference>
<PackageReference Include="Microsoft.TestPlatform.TestHost">
<Version>15.0.0-preview-20161005-01</Version>
<Version>15.0.0-preview-20161025-02</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft.CSharp.targets" />

View file

@ -171,7 +171,10 @@
<!-- Crossgen the Shared Framework -->
<ItemGroup>
<SdkFiles Remove="*" />
<SdkFiles Include="$(SdkOutputDirectory)/**/*" />
<!-- Removing Full CLR built TestHost assemblies from getting Crossgen as it is throwing error -->
<SdkFilesExclude Include="$(SdkOutputDirectory)/TestHost*/**/*" />
<SdkFiles Include="$(SdkOutputDirectory)/**/*" Exclude="@(SdkFilesExclude)" />
<SdkFilesWithPEMarker Remove="*" />
</ItemGroup>
@ -216,8 +219,6 @@
<Copy SourceFiles="@(MSBuildTargetsToCopy)"
DestinationFiles="@(MSBuildTargetsToCopy->'$(SdkOutputDirectory)/%(RecursiveDir)%(Filename)%(Extension)')" />
<RemoveDir Directories="$(SdkOutputDirectory)/Extensions" />
<ItemGroup>
<FilesToClean Include="$(StageDirectory)/sdk/**/vbc.exe" />
</ItemGroup>

View file

@ -0,0 +1,73 @@
<!--
***********************************************************************************************
Microsoft.TestPlatform.CrossTargeting.targets
WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
created a backup copy. Incorrect changes to this file will make it
impossible to load or build your projects from the command-line or the IDE.
Copyright (c) .NET Foundation. All rights reserved.
***********************************************************************************************
-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
===================================================================================
DispatchToInnerBuildsWithVSTestTarget
Builds this project with /t:$(InnerVSTestTargets) /p:TargetFramework=X for each
value X in $(TargetFrameworks)
[IN]
$(TargetFrameworks) - Semicolon delimited list of target frameworks.
$(InnerVSTestTargets) - The targets to build for each target framework
[OUT]
@(InnerOutput) - The combined output items of inner targets across
all target frameworks..
===================================================================================
-->
<Target Name="DispatchToInnerBuildsWithVSTestTarget" Returns="@(InnerOutput)">
<ItemGroup>
<_TargetFramework Include="$(TargetFrameworks)" />
</ItemGroup>
<MSBuild Projects="$(MSBuildProjectFile)"
Condition="'$(TargetFrameworks)' != '' "
Targets="$(InnerVSTestTargets)"
Properties="TargetFramework=%(_TargetFramework.Identity);VSTestNoBuild=true">
<Output ItemName="InnerOutput" TaskParameter="TargetOutputs" />
</MSBuild>
</Target>
<!--
==================================================================================
VSTest
Cross-targeting version of VSTest.
[IN]
$(TargetFrameworks) - Semicolon delimited list of target frameworks.
$(InnerVSTestTargets) - The targets to build for each target framework. Defaults
to 'VSTest' if unset, but allows override to support
`msbuild /p:InnerTargets=X;Y;Z` which will build X, Y,
and Z targets for each target framework.
[OUT]
@(InnerOutput) - The combined output items of the inner targets across
all builds.
=================================================================================
-->
<Target Name="VSTest" >
<CallTarget Condition="'$(VSTestNoBuild)' != 'true'" Targets="Build" />
<CallTarget Targets="SetVSTestInnerTarget" />
<CallTarget Targets="DispatchToInnerBuildsWithVSTestTarget" />
</Target>
<Target Name="SetVSTestInnerTarget" Returns="@(InnerOutput)">
<PropertyGroup Condition="'$(InnerVSTestTargets)' == ''">
<InnerVSTestTargets>VSTest</InnerVSTestTargets>
</PropertyGroup>
</Target>
</Project>

View file

@ -23,8 +23,8 @@
"Microsoft.CodeAnalysis.Build.Tasks": "2.0.0-beta6-60922-08",
"System.Runtime.Serialization.Xml": "4.1.1",
"NuGet.Build.Tasks": "3.6.0-rc-1984",
"Microsoft.TestPlatform.CLI": "15.0.0-preview-20161005-01",
"Microsoft.TestPlatform.Build": "15.0.0-preview-20161005-01"
"Microsoft.TestPlatform.CLI": "15.0.0-preview-20161025-02",
"Microsoft.TestPlatform.Build": "15.0.0-preview-20161025-02"
},
"frameworks": {
"netcoreapp1.0": {

View file

@ -0,0 +1,48 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using Microsoft.DotNet.Tools.Test.Utilities;
using Xunit;
using FluentAssertions;
using Microsoft.DotNet.TestFramework;
using Microsoft.DotNet.Cli.Utils;
using System.Runtime.InteropServices;
namespace Microsoft.DotNet.Cli.Test3.Tests
{
public class GivenDotnetTest3BuildsAndRunsTestFromCsprojForMultipleTFM : TestBase
{
[Fact]
public void TestsFromAGivenProjectShouldRunWithExpectedOutputForMultiTFM()
{
// project targeting net46 will not run in non windows machine.
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
// Copy DotNetCoreTestProject project in output directory of project dotnet-vstest.Tests
string testAppName = "VSTestDesktopAndNetCoreApp";
TestInstance testInstance = TestAssetsManager.CreateTestInstance(testAppName);
string testProjectDirectory = testInstance.TestRoot;
// Restore project VSTestDotNetCoreProject
new Restore3Command()
.WithWorkingDirectory(testProjectDirectory)
.Execute()
.Should()
.Pass();
// Call test3
CommandResult result = new Test3Command().WithWorkingDirectory(testProjectDirectory).ExecuteWithCapturedOutput("");
// Verify
// for target framework net46
result.StdOut.Should().Contain("Total tests: 3. Passed: 2. Failed: 1. Skipped: 0.");
result.StdOut.Should().Contain("Passed TestNamespace.VSTestTests.VSTestPassTestDesktop");
// for target framework netcoreapp1.0
result.StdOut.Should().Contain("Total tests: 3. Passed: 1. Failed: 2. Skipped: 0.");
result.StdOut.Should().Contain("Failed TestNamespace.VSTestTests.VSTestFailTestNetCoreApp");
}
}
}
}

View file

@ -6,6 +6,7 @@ using Xunit;
using FluentAssertions;
using Microsoft.DotNet.TestFramework;
using Microsoft.DotNet.Cli.Utils;
using System.IO;
namespace Microsoft.DotNet.Cli.Test3.Tests
{
@ -28,12 +29,38 @@ namespace Microsoft.DotNet.Cli.Test3.Tests
.Pass();
// Call test3
CommandResult result = new Test3Command().WithWorkingDirectory(testProjectDirectory).ExecuteWithCapturedOutput("/p:TargetFramework=netcoreapp1.0");
CommandResult result = new Test3Command().WithWorkingDirectory(testProjectDirectory).ExecuteWithCapturedOutput("--framework netcoreapp1.0");
// Verify
result.StdOut.Should().Contain("Total tests: 2. Passed: 1. Failed: 1. Skipped: 0.");
result.StdOut.Should().Contain("Passed TestNamespace.VSTestTests.VSTestPassTest");
result.StdOut.Should().Contain("Failed TestNamespace.VSTestTests.VSTestFailTest");
}
[Fact]
public void TestWillNotBuildTheProjectIfNoBuildArgsIsGiven()
{
// Copy DotNetCoreTestProject project in output directory of project dotnet-vstest.Tests
string testAppName = "VSTestDotNetCoreProject";
TestInstance testInstance = TestAssetsManager.CreateTestInstance(testAppName);
string testProjectDirectory = testInstance.TestRoot;
// Restore project VSTestDotNetCoreProject
new Restore3Command()
.WithWorkingDirectory(testProjectDirectory)
.Execute()
.Should()
.Pass();
string expectedError = Path.Combine(testProjectDirectory, @"bin\Debug\netcoreapp1.0\VSTestDotNetCoreProject.dll");
expectedError = "The test source file " + "\""+ expectedError + "\"" + " provided was not found.";
// Call test3
CommandResult result = new Test3Command().WithWorkingDirectory(testProjectDirectory).ExecuteWithCapturedOutput("--noBuild");
// Verify
result.StdOut.Should().Contain(expectedError);
}
}
}