1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
public class SubscriptionService
{
private readonly TimeProvider _timeProvider;
public SubscriptionService(TimeProvider timeProvider)
{
_timeProvider = timeProvider;
}
public bool IsExpired(Subscription sub)
{
return sub.ExpiryDate < _timeProvider.GetUtcNow();
}
}
// 测试
[Fact]
public void IsExpired_ExpiredDate_ReturnsTrue()
{
// 用 FakeTimeProvider 控制时间
var fakeTime = new FakeTimeProvider(new DateTimeOffset(2026, 5, 1, 12, 0, 0, TimeSpan.Zero));
var service = new SubscriptionService(fakeTime);
var sub = new Subscription { ExpiryDate = new DateTime(2026, 4, 30) };
Assert.True(service.IsExpired(sub));
}
[Fact]
public void IsExpired_FutureDate_ReturnsFalse()
{
var fakeTime = new FakeTimeProvider(new DateTimeOffset(2026, 5, 1, 12, 0, 0, TimeSpan.Zero));
var service = new SubscriptionService(fakeTime);
var sub = new Subscription { ExpiryDate = new DateTime(2026, 6, 1) };
Assert.False(service.IsExpired(sub));
}
// 推进时间
[Fact]
public void Subscription_ExpiresAfterTimeAdvance()
{
var fakeTime = new FakeTimeProvider(new DateTimeOffset(2026, 5, 1, 12, 0, 0, TimeSpan.Zero));
var service = new SubscriptionService(fakeTime);
var sub = new Subscription { ExpiryDate = new DateTime(2026, 5, 10) };
Assert.False(service.IsExpired(sub));
// 推进时间到过期之后
fakeTime.Advance(TimeSpan.FromDays(15));
Assert.True(service.IsExpired(sub));
}
|