@Test
public void testExecuteJob04() throws Exception {

    Semaphore semaphore = spy(new Semaphore(10));
    doThrow(InterruptedException.class).when(semaphore).acquire();
    doReturn(true).when(asyncJobWorker).beforeExecute(anyString());
    
    AsyncJobLauncherImpl asyncJobLauncher = new AsyncJobLauncherImpl(
            threadPoolTaskExecutor, asyncJobWorker);
    asyncJobLauncher.taskPoolLimit = semaphore;
    // テスト実行
    try {
        asyncJobLauncher.executeJob("0000000001");
        fail("An exception has not been occured.");
    } catch (BatchException be) {
        // 目的の例外が発生していること
        assertTrue(be.getCause() instanceof InterruptedException);
        // AsyncJobWorker#executeWorker()が呼び出されていないこと。
        verify(asyncJobWorker, never()).executeWorker(anyString());
        // エラーログ（EAL025054）とTaskRejectedExceptionの例外メッセージが出力されていること。
        assertTrue(logger.getLoggingEvents()
                .get(0)
                .getThrowable()
                .get() instanceof InterruptedException);
        assertEquals(
                "[EAL025054] When the job is waiting for a available worker thread, it has been interrupted. jobSequenceId:0000000001",
                logger.getLoggingEvents().get(0).getMessage());
    }
}