【问题标题】:running xunit tests included in a .NET Standard 1.6 library运行 .NET Standard 1.6 库中包含的 xunit 测试
【发布时间】:2017-07-29 18:30:48
【问题描述】:

我刚刚在 Visual Studio 2017 中创建了一个 netstandard 库,并添加了对 xunitxunit.runner.visualstudio 的引用,但是 VS 测试资源管理器和 Resharper 2017 EAP 3 无法识别任何测试。我见过:Unit testing a .NET Standard 1.6 library 但 project.json 不见了,csproj 又回来了。

我必须做什么才能运行 netstandard 库中包含的单元测试?

库.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="xunit" Version="2.2.0" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
  </ItemGroup>
</Project>

Test.cs

namespace ClassLibrary2
{
    public class Class1
    {
        [Fact]
        public void RescharperShouldRunTest()
        {
            Assert.True(true);
        }
    }
}

编辑

感谢答案,我取得了一些进步。

添加

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />  
<!-- ... and ...  --> 
<ItemGroup>
    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>

没有影响。只有当我将TargetFramework 更改为netcoreapp1.1 时,VS 才发现测试并可以运行它们。使用netstandard1.6,测试资源管理器保持为空。但我不想要一个 netcore 应用程序。我想要一个 .NET 标准库。

【问题讨论】:

  • 很少有人在他们的类库中包含单元测试用例。如果过去将测试用例放在单独的类库中,那么将其更改为 .NET Core 的控制台应用程序也几乎不费吹灰之力。我不明白您为什么强调“我不想要 netcore 应用程序”。这不是讨论的态度。
  • .NET 核心不是 .net 标准。请参阅:msdnshared.blob.core.windows.net/media/2016/09/… netcore 与 Xamarin 不兼容。

标签: c# visual-studio-2017 resharper xunit .net-standard


【解决方案1】:

如果您运行 dotnet new xunit,您将看到包含的附加参考。

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />

我在当前的 IDE 工具中发现了相同的结果。但是,您可以使用

在命令行上运行测试
dotnet test -l "trx"

我正在尝试以 netstandard1.5;net452 为目标,但只运行 net452 测试,而不运行 netstandard1.5 测试。

【讨论】:

  • 令人讨厌的 dotnet 测试只针对项目目录执行,因此如果您的解决方案中有多个测试项目,您将不得不多次运行它。
  • 感谢您的回答。不幸的是,它没有按预期工作。请查看我的编辑。
【解决方案2】:

不幸的是,你是正确的,类库(或 .net 标准库)不是用来运行单元测试的。事实上,你在网上找到的许多教程(例如这个:http://dotnetcoretutorials.com/2017/01/30/running-unit-tests-dotnet-test/)会引导你创建一个 CONSOLE 应用程序,然后删除你不需要的东西。

我认为问题可能是为什么您的单元测试需要在 .net 标准库中?如果您正在分发具有关联单元测试的库,则测试本身不需要符合 .net 标准,因为没有任何东西会引用它们。在您自己的解决方案中,不应从其他地方引用要运行的测试程序集。

【讨论】:

  • 虽然这应该是一个评论,但我完全同意你的观点。谁发布这个问题应该严格遵循微软的设计,而不是反对它。
  • 因为他们之前在 PCL 259 中。这使我能够在 Windows、Android 和 iOS 等不同平台上运行单元测试。 .Net 标准是 PCL 的继任者。我不同意这是一种反模式。您认为我的场景的正确库类型是什么?
【解决方案3】:

我知道这是一个较老的问题,但我遇到了同样的问题 - 编写在 Visual Studio 测试运行器和 Xamarin.iOS/Droid 中运行的 xunit 测试。对于 netstandard,我最终做的是创建一个 .NET Core 2.0 的单元测试项目,创建 Xamarin.* 测试应用程序(并为单元配置它们),并创建一个 共享项目 而不是 netstandard图书馆。这对我有用。

我的测试项目结构是:

  • Project.Tests.Droid(Droid UI 项目)
  • Project.Tests.iOS(iOS UI 项目)
  • Project.Tests.Unit(VS 单元测试项目)
  • Project.Tests(共享项目)

我所有的测试都在 Project.Tests 中。

【讨论】:

    【解决方案4】:

    这很棘手,但可行,如果您参考其他答案以及下面的示例项目,

    https://github.com/lextm/sharpsnmplib/blob/master/Tests/Tests.NetStandard.csproj

    当然,示例中使用的一些 NuGet 包已经更新到稳定版。

    以下是关键, <PackageReference Include="Microsoft.NET.Test.Sdk"> <Version>15.0.0-preview-20170125-04</Version> </PackageReference> <PackageReference Include="xunit"> <Version>2.2.0-beta5-build3474</Version> </PackageReference> <PackageReference Include="xunit.runner.visualstudio"> <Version>2.2.0-beta5-build1225</Version> </PackageReference> 包含单元测试用例的项目必须是面向 .NET Core 的控制台应用程序。

    【讨论】:

    • 感谢您的回答。不幸的是,它没有按预期工作。请查看我的编辑。
    猜你喜欢
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多