Mockito, когда метод не работает [MockitoHint] 1. Не используется - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть этот класс теста:

@RunWith(MockitoJUnitRunner.class)  
public class JobServiceTests {

@InjectMocks
private ServiceImpl subject;

@Mock
private ApplicationContext applicationContext;

@Mock
private JobLauncher jobLauncher;

@Mock
private JobExplorer jobExplorer;



@Test
public void test() throws Exception {
    final SimpleJob simpleJob = new SimpleJob();
    simpleJob.setName("nameJob");

    when(applicationContext.getBean(any(String.class), any(Job.class))).thenReturn(simpleJob);

    final JobParameters jobLauncherParam = ImtJobParameters.builder()
            .addParameter("p1", "v1", true)
            .build();

    final BatchJobExec jobExec = subject.launchBatchJob("nameJob", jobLauncherParam);
    assertThat(jobExec.id).isEqualTo(100L);


    final JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
    jobParametersBuilder.addString("param1", "val1", true);
    final JobParameters jobParams = jobParametersBuilder.toJobParameters();

    verify(applicationContext, only()).getBean(eq("myJob"), eq(simpleJob));

}

При запуске теста получите NullPointerException, поскольку jobExec равно нулю и

[MockitoHint] 1. Не используется ... ->в ...

[MockitoHint] ... аргументы в порядке?-> на ... но я не понимаю, почему when(applicationContext.getBean(any(String.class), any(Job.class))).thenReturn(simpleJob); не работает ...

Метод launchBatchJob:

  public BatchJobExec launchBatchJob(final String jobName, final JobLaunchParameters jobLaunchPayload) {
    Job job;
    try {
        job = applicationContext.getBean(jobName, Job.class);
    } catch (final BeansException e) {
        throw new BatchJobNotFoundException(String.format("Batch Job  with name %s not found", jobName), e);
    }

    JobExecution jobExecution;
    try {
        jobExecution = jobLauncher.run(job, createJobParameters(jobLaunchPayload.getParameters()));
    } catch (//
            JobExecutionAlreadyRunningException //
            | JobRestartException //
            | JobInstanceAlreadyCompleteException //
            | JobParametersInvalidException e) {
        LOG.error(String.format("Failed to launch job %s", jobName), e);
        throw new BatchJobLaunchException(//
                String.format("Failed to launch job %s", jobName), //
                e);
    }

    return jobExecutionMapper.mapJobExecutionToImtBatchJobExec(jobExecution);
}

1 Ответ

0 голосов
/ 20 февраля 2019

Измените настройку, чтобы принимать любой класс не any(Job.class):

when(applicationContext.getBean(any(String.class), any(Class.class))).thenReturn(simpleJob);
...