假设我们有如下接口:
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();
现在您可以随意设置请求时间戳来模拟时间间隔。这只是一种可能性。