@Test
  public void testExecute() throws Exception {
    JobStatus jobStatus = jobExecutor.getJobStatus();
    assertFalse(jobStatus.isRunning());

    assertTrue(jobExecutor.execute(context));

    verify(job).execute();
    assertEquals(jobStatus.getJobStatusType(), JobStatusType.FINISHED);
  }
  @Test
  public void testExecuteFailure() throws Exception {
    MigratorException failure = new MigratorException("Failure");
    willThrow(failure).given(job).execute();

    JobStatus jobStatus = jobExecutor.getJobStatus();
    assertFalse(jobStatus.isRunning());

    assertTrue(jobExecutor.execute(context));

    verify(job).execute();
    assertEquals(failure, jobStatus.getFailure());
    assertEquals(jobStatus.getJobStatusType(), JobStatusType.FINISHED);
  }
 /**
  * 同步执行一个任务
  *
  * @param jobData
  * @param executor
  * @return
  */
 private JobResult executeJob(JobData jobData, JobExecutor executor) throws Exception {
   JobResult result = null;
   int clientRetries =
       HttpJobUtils.getJobClientRetries(jobData.getData().get(JobData.JOBDATA_DATA_CLIENTRETRIES));
   for (int i = 1; i <= clientRetries + 1; i++) {
     result = executor.execute(jobData);
     if (result.isSuccess()) {
       if (i > 1) {
         result.getData().put(JobResult.JOBRESULT_DATA_CLIENTRETRYCOUNT, String.valueOf(i));
       }
       break;
     }
     try {
       Thread.sleep(5000);
     } catch (InterruptedException e1) {
     }
     if (i > 1 && i == clientRetries + 1) {
       result.getData().put(JobResult.JOBRESULT_DATA_CLIENTRETRYCOUNT, String.valueOf(i));
     }
   }
   return result;
 }