Завершение программы во время проверки Quartz scheduler с помощью power mockito

Я пытаюсь проверить процесс Quartz scheduler, насмехаясь System.currentTimeMillis()над использованием PowerMockito.

Сценарий :

Я запланировал работу на 6 мая 2016 года 12 часов .Для проверки я пытаюсь System.currentTimeMillis()подстроиться к запланированному времени. Таким образом, кварц будет срабатывать в это конкретное время.

тестовый пример :

 @RunWith(PowerMockRunner.class)
 @PrepareForTest({ QuartzSchedulerThread.class })
 public class SampleExampleTest {

   @Test
   public void test() {
      /**
       * mock the system.current milliseconds
       */
     PowerMockito.mockStatic(System.class);
     long value=getMockedMilliseconds();
     PowerMockito.when(System.currentTimeMillis()).thenReturn(value);

     System.out.println("Mocked milliseconds"+value);
     try {

         SchedulerFactory sf = new StdSchedulerFactory(getProperties());
         Scheduler sched = sf.getScheduler();
         sched.start();

     } catch (SchedulerException e) {
         e.printStackTrace();
    } catch (Exception e) {         
        e.printStackTrace();
    }
}

public  long getMockedMilliseconds() {        
    Date expectedDate=new Date(116, 4, 6 , 11, 57);
    long mokedMilliSeconds = expectedDate.getTime();
    return mokedMilliSeconds;
  }

 public Properties getProperties(){

    Properties properties = new Properties();
    properties.setProperty("org.quartz.scheduler.skipUpdateCheck", "true");

    // set other properties ...such as
    properties.setProperty("org.quartz.jobStore.class",
            "org.quartz.impl.jdbcjobstore.JobStoreTX");
    properties.setProperty("org.quartz.jobStore.driverDelegateClass",
            "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate");
    properties.setProperty("org.quartz.jobStore.tablePrefix", "QRTZ_");
    properties.setProperty("org.quartz.jobStore.dataSource", "obulis");
    //properties.setProperty("org.quartz.jobStore.misfireThreshold", "1000");

    // Datasource configurations
    properties.setProperty("org.quartz.dataSource.obulis.driver",
            "org.postgresql.Driver");
    properties.setProperty("org.quartz.dataSource.obulis.URL",
            "jdbc:postgresql://192.168.27.43:5433/obulis");
    properties.setProperty("org.quartz.dataSource.obulis.user", "postgres");
    properties.setProperty("org.quartz.dataSource.obulis.password",
            "Nuwaza123");
    properties.setProperty("org.quartz.dataSource.obulis.maxConnections",
            "5");
    properties.setProperty("rg.quartz.dataSource.obulis.validationQuery",
            "select 0");

    properties.setProperty("org.quartz.threadPool.class",
            "org.quartz.simpl.SimpleThreadPool");
    properties.setProperty("org.quartz.threadPool.threadCount", "4");

    return properties;
}
 }

Проблема:

Во время выполнения тестового набора программа резко завершает работу перед запуском планировщика. Если PowerMockон удален, запускается планировщик.

консоль:

   Mocked milliseconds1462516020000
   INFO [main] (MLog.java:80) - MLog clients using log4j logging.
   INFO [main] (C3P0Registry.java:204) - Initializing c3p0-0.9.1.1 [built 15-    March-2007 01:32:31; debug? true; trace: 10]
   Picked up _JAVA_OPTIONS: -Djava.net.preferIPv4Stack=true

Что будет причиной этого? Как подделать и проверить, сработает ли задание в это конкретное время ?

1 ответ

  1. Я думаю, что вы идете по очень плохому пути… Вы не должны издеваться над типами, которые вам не принадлежат: https://github.com/mockito/mockito/wiki/How-to-write-good-tests#dont-mock-type-you-dont-own .

    Что именно вы хотите проверить? Что кварц работает? Не имеет смысла — если это не так, библиотека не будет освобождена 😉 если вы хотите подключить ее в интеграционном тесте, просто запустите обычное задание Quartz. Позвольте этому заданию сделать sth (произвести выход), а затем проверьте, присутствует ли этот выход.