我必须维护一个相当大的库,以实现不同层的通信协议。幸运的是,针对许多不同情况有成千上万的单元测试。
我在那些测试库中超时的单元测试中遇到了问题。超时范围在几秒之内,这对于单元测试来说太长了。
我们已经做的是实现单个中央时钟服务,该服务可以配置为以一定速度更快地运行。这样,测试可以更快地完成。但是我们不能选择这个系数太大,因为某些测试会随机失败,因为测试机器的性能会有所不同。另外,调试也是一场噩梦。
我觉得使用任何类型的独立运行时钟来测试超时是错误的。如果这完全在单元测试的控制下会更好。
是否有人知道如何实现它,而不必在库代码中进行太多更改并且以易于添加到单元测试中的方式来实现它?
带超时的库代码或多或少的结构如下:
var startTime = TimeService.CurrentTime;
while (TimeService.CurrentTime < startTime + timeout)
{
// do something
Thread.Sleep(50); // or so
}
并且很难更改此结构。