Xunit 是否使用源生成器来生成测试数据?

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

我的测试是这样的:

[Theory]
[MemberData(nameof(TestData))]
public async Task Test(DateTime? startDate)
{
    // Act
    var currentDate = RunCalculation();

    // Assert
    currentDate.Should().BeCloseTo(startDate, TimeSpan.FromSeconds(5));
}

public static IEnumerable<object[]> TestData()
{
    var now = DateTime.UtcNow;

    return new[]
    {
        new object[]
        {
            now,
        },
        new object[]
        {
            now,
        },
    }
}

currentDate
不依赖于
startDate
,但测试运行后,它们应该是相似的。问题不在于
currentDate
,而在于
startDate

测试似乎是在代码

构建
时调用的,而不是在代码执行时调用。 如果我构建代码,然后 5 分钟后运行测试,测试就会失败。如果我立即构建并运行测试,它就会成功。

Xunit 是否会在编译时以固定值自动生成测试数据?难道这里还有别的事吗?

csproj 文件也有

UtcNow

,这会影响什么吗?

版本:

NET 6
  • VS2022 17.9.2
  • x单元2.6.5
c# .net-core csproj xunit.net
1个回答
1
投票
这里

简而言之,在不涉及技术的情况下,

<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>

在发现时就被“修复”了,后续运行将继续使用该值,直到出现新的构建。

您会注意到测试运行程序中显示的值在运行之间不会发生变化,但仅在您重建时发生变化。

为了克服这个问题,您可以如下定义

DateTimle.Now

MemberDataAttribute

© www.soinside.com 2019 - 2024. All rights reserved.