我正在使用Guava LoadingCache像这样:
@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 以确保异步刷新确实发生。
最佳答案
您可以使用sameThreadExecutor
,而不是模拟ExecutorService
所以任务会立即执行。
关于java - Guava 加载缓存 : How to unit test ListenableFuture within CacheLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24307737/