@Before
  public void beforeEachTest() {
    logger.debug("Before Test");

    dataSource = Mockito.mock(DataSource.class);
    Connection connection = Mockito.mock(Connection.class);
    DatabaseMetaData databaseMetaData = Mockito.mock(DatabaseMetaData.class);
    try {
      Mockito.stub(dataSource.getConnection()).toReturn(connection);
      Mockito.stub(connection.getMetaData()).toReturn(databaseMetaData);
    } catch (Exception e) {
      logger.error("Error Occurred Stubbing Datasource or connection", e);
    }
    transactionManager = new DataSourceTransactionManager();
    transactionManager.setTransactionSynchronization(
        DataSourceTransactionManager.SYNCHRONIZATION_ON_ACTUAL_TRANSACTION);
    transactionManager = Mockito.spy(transactionManager);
    transactionManager.setDataSource(dataSource);

    MapJobInstanceDao jobInstanceDao = new MapJobInstanceDao();
    MapJobExecutionDao jobExecutionDao = new MapJobExecutionDao();
    MapStepExecutionDao stepExecutionDao = new MapStepExecutionDao();
    MapExecutionContextDao ecDao = new MapExecutionContextDao();

    jobLauncherTestUtils = new JobLauncherTestUtils();
    jobRepository =
        new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepExecutionDao, ecDao);

    jobLauncherTestUtils.setJobRepository(jobRepository);
    // jobConfig = new ProductJobConfig();
    // jobConfig.setJobRepository(jobRepository);
    executionContext = new ExecutionContext();
  }