从未发现过单元测试

时间:2017-05-27 01:44:30

标签: unit-testing .net-core mstest visual-studio-2017

我在Visual Studio 2017 Update 3预览中有以下解决方案,其中包含一个Xamarin.Forms项目,如NetStandard1.4和一个NetStandard1.4 dotnet Core Services.API项目和一个NetStandard1.6 dotnet核心单元测试项目。

enter image description here

单元测试项目仅引用服务项目。 csproj文件看起来像这样,添加了MSTest框架用于单元测试。但问题是从未发现过这些测试。

的csproj

<PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
    <AssemblyName>FloatSink.Services.Api.Tests</AssemblyName>
    <RootNamespace>FloatSink.Services</RootNamespace>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DebugType>full</DebugType>
    <DebugSymbols>True</DebugSymbols>
</PropertyGroup>

<ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0"></PackageReference>
    <PackageReference Include="Microsoft.TestPlatform.TestHost" Version="15.0.0" />
    <PackageReference Include="MSTest.TestAdapter" Version="1.1.17" />
    <PackageReference Include="MSTest.TestFramework" Version="1.1.17" />
</ItemGroup>

<ItemGroup>
    <ProjectReference Include="..\Services.API\Services.API.csproj" />
</ItemGroup>

单元测试类

[TestClass]
public class AppBuilderTests
{
    private const string DebugBuild = "Debug build";
    private const string ReleaseBuild = "Release build";

    /// <summary>
    /// Test that the ToString() method returns the string we sent into the constructor
    /// </summary>
    [TestMethod]
    public void ToStringReturnsStringFromCtor()
    {
        // Act
        var build = new AppBuild(DebugBuild);

        // Assert
        Assert.AreEqual(DebugBuild, build.ToString());
    }
}

最后,这是我构建时的测试输出,并从Test Explorer中选择Run All(为空)。

  

[5/26/2017 6:38:23 PM Informational] ------加载播放列表开始------

     

[5/26/2017 6:38:23 PM信息] ==========加载播放列表已完成(0:00:00.004501)==========

     

[5/26/2017 6:38:24 PM信息] ------发现测试开始------

     

[5/26/2017 6:38:25 PM信息] ==========发现测试结束:0   发现(0:00:00.5716028)==========

为什么MSTest单元测试不会出现在测试资源管理器中并允许我发现/运行它们?

更新

我将调试类型从Full更改为可移植,我也尝试使用xUnit并遇到同样的问题。所以这不是MSTest特有的。

csproj with xUnit

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
    <AssemblyName>FloatSink.Services.Api.Tests</AssemblyName>
    <RootNamespace>FloatSink.Services</RootNamespace>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DebugType>portable</DebugType>
    <DebugSymbols>True</DebugSymbols>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
    <PackageReference Include="xunit" Version="2.2.0" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Services.API\Services.API.csproj" />
  </ItemGroup>

</Project>

1 个答案:

答案 0 :(得分:2)

问题是您的TargetFramework设置为.NET标准版本。

尽管测试项目看起来像库,但它们具有可运行输出的更多特性 - 15.0.0测试sdk甚至将输出类型更改为Exe以触发生成运行测试所需的资产。 (在2.0 / 15.3.0中,这将更改为新的HasRuntimeOutput属性。)

此处的修复方法是将TargetFramework更改为某个版本的net*netcoreapp*,具体取决于您要在哪个框架上运行测试。