InterruptedException
本番コードからを発生させる統合テストを作成しようとしています:
@Test
public void test() {
productionObject = new ProductionObject(
com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor());
Thread.currentThread().interrupt();
assertThat(productionObject.execute(), equalTo(defaultResponse));
}
内部productionObject
の実装:
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
)。私は失敗をローカルで再現することができず、while (true) ループでテストを実行し、ソフトウェア レンダリングで glxgears を実行してより高い負荷をシミュレートしました ;-) 誰でも私の間違いを見つけることができますか?または私を助けることができるツールを提案しますか?