加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 模拟计算机系统日期时间

发布时间:2020-12-16 00:20:31 所属栏目:百科 来源:网络整理
导读:我在C#中构建了一个 Windows服务,它根据当前的日期和时间从数据库中调用实时时间序列数据. 我在测试数据库中有测试数据,我想用它来计算数据是否以正确的方式使用. 我想知道是否有人使用过应用程序或有任何其他方法在本地计算机上“模拟”系统日期.例如,我可
我在C#中构建了一个 Windows服务,它根据当前的日期和时间从数据库中调用实时时间序列数据.
我在测试数据库中有测试数据,我想用它来计算数据是否以正确的方式使用.
我想知道是否有人使用过应用程序或有任何其他方法在本地计算机上“模拟”系统日期.例如,我可以运行此应用程序并将其设置为将系统日期设置为指定日期.

任何建议都会很棒.

解决方法

只需封装您对接口后面的DateTime.Now属性的访问权限.

public interface IDateTimeProvider
{
    DateTime Now { get; }
}

在您的代码中,使用如下实现:

public class DateTimeProvider : IDateTimeProvider
{
    public DateTime Now { get { return DateTime.Now; } }
}

对于测试,您可以通过创建测试类或使用模拟框架来模拟IDateTimeProvider.

如果将此接口与依赖注入等技术一起使用,即使在运行时也很容易改变服务的行为.

你可以,例如创建一个总是休息一小时的IDateTimeProvider:

public class AlwaysToLateDateTimeProvider : IDateTimeProvider
{
    public DateTime Now { get { return DateTime.Now.AddHours(-2); } }
}

或创建一个从文件,数据库,管道等读取“模拟”日期时间的实现.

在测试时,您将配置您的服务以使用其中一个实现,并且在实时模式下运行时,只需配置您的依赖注入以使用返回“正确”日期时间的普通实现.

当然有TypeMock Isolator ……

Isolate.WhenCalled(() => DateTime.Now).WillReturn(new DateTime(2008,1,1));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读