我正在尝试编写一个集成测试,导致InterruptedException
从生产代码中引发一个:
@Test
public void test() {
productionObject = new ProductionObject(
com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor());
Thread.currentThread().interrupt();
assertThat(productionObject.execute(), equalTo(defaultResponse));
}
InsideproductionObject
的实现:
try {
for (Future<T> future : executorService.invokeAll(tasks))) {
results.add(future.get());
}
return results;
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // preserve interrupt flag
return defaultResponse;
}
在里面AbstractQueuedSynchronizer.acquireSharedInterruptibly()
我看到:
if (Thread.interrupted())
throw new InterruptedException();
所以我希望这个测试能够始终如一地通过。
我在我们的构建服务器中看到了这个失败(results
返回而不是defaultResponse
)。我一直无法在本地重现故障,在一段时间(真实)循环中运行测试,并通过运行带有软件渲染的 glxgears 来模拟更高的负载;-) 任何人都可以发现我的错误,给我一些关于在哪里看的建议,或建议可以帮助我的工具?