我“只是”想解析和比较字符串中的
DateTime(Offset)
,并使用FluentAssertions检查它是否在集合列表中。 .Should()
很容易用于比较是否存在该类型的元素。
然而,当我比较时间时,我也想要.BeCloseTo
有一个偏移,因为时间可能不那个准确,我不在乎它有多准确。
CronExpressions
包含一个 Raw
属性,将字符串表示为 DateTime(Offset)。 (即使不是,我们也假设它确实如此。测试失败会告诉我。)
[Test]
public void SchedulesItselfForNow()
{
this.job = new Job();
this.job.MetaData.CronExpressions.Should().Contain(x =>
DateTimeOffset.Parse(x.Raw).Should().BeCloseTo(DateTimeOffset.Now, TimeSpan.FromMinutes(1))
);
}
我已经问过ChatGPT,它向我提供的唯一解决方案是稍微重构一下:
[Test]
public void SchedulesItselfForNow()
{
this.job = new Job();
this.job.MetaData.CronExpressions
.Select(x => DateTimeOffset.Parse(x.Raw))
.Should()
.Contain(date => date.Should().BeCloseTo(DateTimeOffset.Now, TimeSpan.FromMinutes(1)));
}
我知道我可以使用
.Which
,但为此我之前必须有一个有效的(通常是布尔值)断言/比较。就我而言,我没有这个,我只想直接比较字符串:
[Test]
public void SchedulesItselfForNow()
{
this.job = new Job();
this.job.MetaData.CronExpressions
.Select(x => DateTimeOffset.Parse(x.Raw))
.Should()
.Contain(date => true) // but what to use here?
.Which.Should().BeCloseTo(DateTimeOffset.Now, TimeSpan.FromMinutes(1));
}
啊,这个答案引导我找到
...Satisfy
方法,这似乎可以满足我的要求:
[Test]
public void SchedulesItselfForNow()
{
this.job = new Job();
this.job.MetaData.CronExpressions
.Select(x => DateTimeOffset.Parse(x.Raw))
.Should()
.SatisfyRespectively(x => x.Should().BeCloseTo(DateTimeOffset.Now, TimeSpan.FromMinutes(1)));
}