【问题标题】:Is it possible to build .NET Standard + .NET Core class/library to .NET Standard only?是否可以仅将 .NET Standard + .NET Core 类/库构建为 .NET Standard?
【发布时间】:2018-11-17 16:18:34
【问题描述】:

我有一个使用 .NET Standard 2.0 的类/库项目,我想直接在项目中添加单元测试(这样更容易发现并且耦合度更高)。但是,因为每个测试框架都需要特定的平台,所以我不得不添加另一个框架,例如 .NET Core。

我需要将此项目构建为 .NET Standard 只是因为我需要在另一个项目(Unity 项目,其中选择的框架是 .NET Standard 2.0)中使用它。

我是否可以将 .NET Core 添加到项目中,以便我可以使用单元测试框架,但仅使用 .NET Standard 构建最终的 dll?

或者我应该放弃并使用另一个引用该项目的项目来代替吗?因为如果单元测试直接嵌入到项目中会更舒服,以免在发生变化时更新单元测试。

【问题讨论】:

  • 虽然我不太明白为什么需要在 .net 核心上运行测试,但我也不明白为什么它不能像你描述的那样工作。大约需要 10 分钟才能确定。
  • Here it's stated "Visual Studio 和 VSTest 要求测试以特定平台为目标......对于包括 [nunit] xUnit 和 MSTest2 在内的所有测试适配器,此限制都是相同的。"这就是我需要 .NET Core 的原因。
  • 好的。您是否尝试过连接一个小型演示以查看它是否有效?
  • stackoverflow.com/questions/52210304/… 这可能有助于回答您的问题。
  • 我知道这不是您要的,但是将您的单元测试与正在测试的代码放在同一个项目中是一种不寻常的设置;我建议遵循单独测试程序集的通常模式(在您的情况下,它针对 .NET Core)。两个项目可以在同一个解决方案中,所以我认为当你的代码发生变化时你不太可能记得更新你的测试。

标签: c# .net


【解决方案1】:

好的,我想我知道如何在不破坏任何东西的情况下满足我的特定需求。

首先,将 .NET Core 添加到项目依赖项并添加测试框架(XUnit、NUnit、MSTest 等)。然后,像往常一样添加测试,但要注意单元测试功能和包含。

例如(使用 XUnit),我们只想在调试版本中运行或启用单元测试:

#if DEBUG
using Xunit;
#endif

#if DEBUG
    [Fact]
    public void Test() {
        Assert.True(something);
    }
#endif

然后,在 .csproj 文件中,为依赖项添加保护:

<ItemGroup>
  <PackageReference Condition="'$(Configuration)'=='Debug'" Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
  <PackageReference Condition="'$(Configuration)'=='Debug'" Include="xunit" Version="2.4.1" />
  <PackageReference Condition="'$(Configuration)'=='Debug'" Include="xunit.runner.visualstudio" Version="2.4.1" />
</ItemGroup>

这将确保它不会链接到发布版本上的特定测试框架。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多