Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Guava LoadingCache:如何在CacheLoader中对ListenableFuture进行单元测试_Java_Unit Testing_Junit_Mockito_Guava - Fatal编程技术网

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
,以便立即执行任务