Java Guava LoadingCache:如何在CacheLoader中对ListenableFuture进行单元测试
我使用的是这样的:Java Guava LoadingCache:如何在CacheLoader中对ListenableFuture进行单元测试,java,unit-testing,junit,mockito,guava,Java,Unit Testing,Junit,Mockito,Guava,我使用的是这样的: @Inject private ExecutorService executorService; private LoadingCache<CacheKey, ResponseEntity<String>> constructCache() { return CacheBuilder.newBuilder() .maximumSize(100) .expireAfterWrite(15, TimeUnit.MI
@Inject
private ExecutorService executorService;
private LoadingCache<CacheKey, ResponseEntity<String>> constructCache() {
return CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterWrite(15, TimeUnit.MINUTES)
.build(
new CacheLoader<CacheKey, ResponseEntity<String>>() {
@Override
public ResponseEntity<String> load(CacheKey cacheKey) throws Exception {
return loadResource(cacheKey);
}
@Override
public ListenableFuture<ResponseEntity<String>> reload(final CacheKey cacheKey, ResponseEntity<String> old) {
ListenableFutureTask<ResponseEntity<String>> task = ListenableFutureTask.create(new Callable<ResponseEntity<String>>() {
@Override
public ResponseEntity<String> call() throws Exception {
// this line here!
return loadResource(cacheKey);
}
});
executorService.execute(task);
return task;
}
}
);
}
private ResponseEntity<String> loadResource(CacheKey cacheKey) {
// ...
// external call
// ...
}
@Inject
私人遗嘱执行人服务;
私有加载缓存constructCache(){
返回CacheBuilder.newBuilder()
.最大尺寸(100)
.expireAfterWrite(15,时间单位:分钟)
.建造(
新缓存加载程序(){
@凌驾
公共响应属性加载(CacheKey CacheKey)引发异常{
返回loadResource(cacheKey);
}
@凌驾
public ListenableFuture重新加载(最终缓存密钥缓存密钥,响应旧){
ListenableFutureTask任务=ListenableFutureTask.create(new Callable()){
@凌驾
public ResponseEntity调用()引发异常{
//这条线在这里!
返回loadResource(cacheKey);
}
});
executorService.execute(任务);
返回任务;
}
}
);
}
专用响应属性加载资源(CacheKey CacheKey){
// ...
//外呼
// ...
}
我可以测试每一行,除了一行。如何在可运行任务中对行
return loadResource(cacheKey)
进行单元测试?现在我正在模拟executorService,以确保异步刷新确实发生。如果要模拟executorService
,请使用ArgumentCaptor
获取传递的ListenableFutureTask
。对任务执行call
方法,并验证是否调用了loadResource
。您可以使用,而不是模拟ExecutorService
,以便立即执行任务