# FluentAssertions Datetime 断言

DateTime

var theDatetime = new DateTime(2021, 3, 1, 22, 15, 0).AsLocal();

theDatetime.Should().Be(1.March(2021).At(22, 15)); // 1.March 是 Fluent assertions的写法 2021年 3月1号 22 时 15 分
theDatetime.Should().BeAfter(1.February(2021)); //必须是 2021年 2月1号之后。 中国人可能不太习惯这种写法,我们还是用 new DateTime这种方式来写
theDatetime.Should().BeBefore(2.March(2021));// 之前的时间
theDatetime.Should().BeOnOrAfter(1.March(2021)); 
//theDatetime.Should().BeOnOrBefore(1.March(2021));
theDatetime.Should().BeSameDateAs(1.March(2021).At(22, 16));
theDatetime.Should().BeIn(DateTimeKind.Local);

theDatetime.Should().NotBe(1.March(2021).At(22, 16));
theDatetime.Should().NotBeAfter(2.March(2021));
theDatetime.Should().NotBeBefore(1.February(2021));
theDatetime.Should().NotBeOnOrAfter(2.March(2021));
theDatetime.Should().NotBeOnOrBefore(1.February(2021));
theDatetime.Should().NotBeSameDateAs(2.March(2021));

//是其它的某一个时间
theDatetime.Should().BeOneOf(
    1.March(2021).At(21, 15),
    1.March(2021).At(22, 15),
    1.March(2021).At(23, 15)
);

如果我们只想判断其中的年月份小时分钟秒的话我们可以用

 var theDatetime = new DateTime(2021, 3, 1, 22, 15, 0).AsLocal();

theDatetime.Should().HaveDay(1); // 是不是第1天
theDatetime.Should().HaveMonth(3); // 是不是第3月
theDatetime.Should().HaveYear(2021); // 是不是 2021年
theDatetime.Should().HaveHour(22);  // 是不是第22小时
theDatetime.Should().HaveMinute(15);
theDatetime.Should().HaveSecond(0);

theDatetime.Should().NotHaveDay(2);
theDatetime.Should().NotHaveMonth(4);
theDatetime.Should().NotHaveYear(2011);
theDatetime.Should().NotHaveHour(23);
theDatetime.Should().NotHaveMinute(16);
theDatetime.Should().NotHaveSecond(1);

var theDatetimeOffset = 1.March(2021).AsUtc().ToDateTimeOffset(2.Hours());

theDatetimeOffset.Should().HaveOffset(new TimeSpan(2, 0, 0));
theDatetimeOffset.Should().NotHaveOffset(new TimeSpan(3, 0, 0));

BeCloseTo

很多时候我们的时间是用DateTime.Now之类来生成的。这个时间又在方法的内部。所以我们比较难取到这个准确的时间时。 我们可以用BeCloseTo来判断是否接近某个时间。

 var theDatetime = new DateTime(2021, 3, 1, 22, 15, 0).AsLocal();
theDatetime.Should().BeCloseTo(1.March(2021).At(22, 15), 2000); // 时间是否接近于 2021-3-1 22:15:00  2000 毫秒内
theDatetime.Should().BeCloseTo(1.March(2021).At(22, 15));       // 时间是否接近于 2021-3-1 22:15:00  20 毫秒内 默认值是20毫秒
theDatetime.Should().BeCloseTo(1.March(2021).At(22, 15), 2.Seconds());

theDatetime.Should().NotBeCloseTo(2.March(2021), 1.Hours());

TimeSpan的断言

var timeSpan = new TimeSpan(12, 59, 59);
timeSpan.Should().BePositive(); //必须是正数
timeSpan.Should().BeNegative(); //必须是负数
timeSpan.Should().Be(12.Hours()); // 必须是 12小时
timeSpan.Should().NotBe(1.Days()); // 必须是1天
timeSpan.Should().BeLessThan(someOtherTimeSpan);
timeSpan.Should().BeLessOrEqualTo(someOtherTimeSpan);
timeSpan.Should().BeGreaterThan(someOtherTimeSpan);
timeSpan.Should().BeGreaterOrEqualTo(someOtherTimeSpan);

Timespan也有BeCloseTo

timeSpan.Should().BeCloseTo(new TimeSpan(13, 0, 0), 10.Ticks());
timeSpan.Should().NotBeCloseTo(new TimeSpan(14, 0, 0), 10.Ticks());
最近更新的
...