如何单元测试ListenableFuture我使用Guava LoadingCache这样的:番石榴LoadingCache:内的CacheLoader
@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
// ...
}
我可以测试每行只有一个除外。如何在Runnable任务中单元测试return loadResource(cacheKey)
行?现在我正在嘲笑executorService,以确保异步刷新确实发生。