@Test
public void testExecuteJob03() throws Exception {

    Semaphore semaphore = new Semaphore(10);
    doThrow(TaskRejectedException.class).when(threadPoolTaskExecutor)
            .execute(any(Runnable.class));
    doReturn(true).when(asyncJobWorker).beforeExecute(anyString());

    AsyncJobLauncherImpl asyncJobLauncher = new AsyncJobLauncherImpl(
            threadPoolTaskExecutor, asyncJobWorker);
    asyncJobLauncher.taskPoolLimit = semaphore;

    // テスト実行
    asyncJobLauncher.executeJob("0000000001");

    // AsyncJobWorker#executeWorker()が呼び出されていないこと。
    verify(asyncJobWorker, never()).executeWorker(anyString());

    // セマフォのサイズが元の値に戻っていること。
    assertEquals(10, semaphore.availablePermits());

    // エラーログ（EAL025054）とTaskRejectedExceptionの例外メッセージが出力されていること。
    assertTrue(logger.getLoggingEvents()
            .get(0)
            .getThrowable()
            .get() instanceof TaskRejectedException);
    assertEquals(
            "[EAL025047] This job cannot be accepted for execution. jobSequenceId:0000000001",
            logger.getLoggingEvents().get(0).getMessage());
}