【发布时间】:2020-10-18 12:45:23
【问题描述】:
我正在尝试编写一个“ping”代码,它会在一分钟内发布一次到某个休息服务。
我最简单的“旧”方法如下:
while (true)
{
if (cancellationToken.IsCancellationRequested)
{
return;
}
await Task.Delay(TimeSpan.FromMinutes(1), cancellationToken);
try
{
await PingImpl(clientId, baseUri, cancellationToken);
}
catch (Exception ex)
{
_logger.LogError(ex, "ping {BaseUri} {Endpoint} failed", baseUri, Endpoint);
}
}
现在,为了对服务器的循环调用进行单元测试,我通常会将延迟持续时间注入生产中的一毫秒和生产中的一分钟(我知道它会比每分钟轮询一次“慢”一次,因为执行请求所需的时间,可以接受)
现在,使用#codatime,我不想搞乱注入参数,并希望在 IClock 上进行一些扩展,例如
await _clock.Delay(...);
然后,单元测试代码会提前假时钟并触发操作。
你知道一些优雅的方式来实现这种行为吗?
【问题讨论】: