首页 > 解决方案 > 我如何模拟未来的日期来测试它?

问题描述

我的 sprint 任务之一是测试到期日期是否会改变。从 2 月 1 日开始,这将在次年的 9 月 30 日到期。从 7 月 1 日开始,3 月 31 日到期。我想测试这是否有效,但我对如何实际测试这一点持空白。我想可能在本地运行并更改我的系统时钟,但这与数据库并没有很好的配合。

internal DateTime GetPowerPackageExpirationDate()
{
    if (DateTime.Now.Month >= 2 && DateTime.Now.Month <= 6) {
        return new DateTime(DateTime.Now.Year + 1, 09, 30);
    }
    else {
        return new DateTime(DateTime.Now.Year + 1, 03, 31);
    }
}

标签: c#asp.net-mvc

解决方案


这是一个通常适用于statics 的典型用例:

处理它的最好方法是创建一个可以模拟的自定义方法来返回日期。

例子:

public interface IDateProvider
{
    DateTime Now { get; }
}

因此,您在代码中使用的具体实现将返回DateTime.Now

测试一;无论您将其设置为返回什么;未来、过去等


推荐阅读