将集合的项目(如 DateTimeOffset)与 FluentAssertions 的 Contain 进行比较,更具体地说,与 Should

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

我“只是”想解析和比较字符串中的

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));
        }
unit-testing datetime testing nunit fluent-assertions
1个回答
0
投票

啊,这个答案引导我找到

...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)));
        }
© www.soinside.com 2019 - 2024. All rights reserved.