如何对时间相关的方法进行单元测试?



假设我们有如下接口:

interface CallChecker {
boolean canCall(String ipAddress, Object method);
}

我们限制每个方法每秒从一个IP调用10次,即如果一个方法在一秒钟内被调用超过10次,CallChecker::canCall(ip, method)应该返回false。

我们如何单元测试这个函数?

侧面问题:是否有更好的方法来定义method而不是Object类型?

在某些情况下,您必须注册单个请求的时间戳,以查看它们是否>

在运行时,您将使用例如系统时钟,Instant.now()或其他。在单元测试中,您将手动设置这些时间戳。类似于(概念性的):

t0=Instant.now();
for(int i=1;i++;i<=10){
yourService.handleRequest(request,t0.plusMilis(i*10));
assertThat(yourSrvice.canMakeRequest).isTrue();
}
yourService.handleRequest(request,t0.plusMilis(300));
assertThat(yourSrvice.canMakeRequest).isFalse();

现在您可以随意设置请求时间戳来模拟时间间隔。这只是一种可能性。

最新更新