使用 #if NET_STANDARD_2_1 指令测试库

问题描述 投票:0回答:1

我有一个针对多个框架的库,其中之一是.Net 8,其中之一是.Net Standard 2.1。旧框架中不包含某些功能,因此我为其编写了自己的版本。在这种情况下,请考虑以下代码:

public static class RandomExtensions
{
#if NETSTANDARD2_1_OR_GREATER
    public static long NextInt64(this Random random) => // my implementation.
#endif
}

我有一个针对 .Net 8 的测试项目 (xUnit),并进行以下测试:

// Ignore for now that this is a silly test...
public class RandomExtensionsTests
{
    [Fact]
    public void NextInt64()
    {
        var random = new Random();
        var value = random.NextInt64();
        Assert.InRange(value, 0, long.MaxValue - 1);
    }
}

当我运行此代码时,它显然是针对 .Net 8 实现。我怎样才能让它针对我的实施?

我的想法是,我可以在我的测试项目中针对与我的库项目中相同的框架,但是您不能在测试项目中针对.Net 标准,因为它不是一个平台(参见此处)。所以我尝试瞄准 .Net core app 2.1,但是当我尝试引用我的库时,我收到警告

Project xxx is not compatible with netcoreapp2.1
。我对剩下要做的事情有点不知所措。

c# unit-testing xunit multitargeting .net-standard-2.1
1个回答
0
投票

您可以尝试使用

dotnet
CLI,即
dotnet test
命令。

您可以使用

--framework
选项。

来自文档

要运行测试的目标框架的目标框架名称 (TFM)。还必须在项目文件中指定目标框架。

所以你可以尝试一下

dotnet test --framework netstandard2.1
© www.soinside.com 2019 - 2024. All rights reserved.