Перемешивание JobExplorer с использованием @MockBean, генерирующее исключение: InstanceAlreadyException - PullRequest
0 голосов
/ 01 февраля 2019

"Как я могу издеваться над JobExecution при тестировании одного шага с помощью JobLauncherTestUtils?"

"Я пытался с

@MockBean JobExplorer jobExplorer 

, но он выбрасываетИсключение:

Failed to load applicationContext,Caused by InstanceAlreadyExistsException

, но он работает нормально, когда я запускаю его по отдельности. Так что я попытался использовать

@Mock JobExplorer jobExplorer;
public void setUp(){
    MockitoAnnotations.init(this);
}

, но этот даже не работал :( Затем я добавил

@RunWith(MockitoJunitRunner.class)
@Configuartion(...)
class MockTest{
@Mock JobExplorer jobExplorer
public void setUp(){
    MockitoAnnotations.init(this);
}

}

Основной код:


@RunWith(SpringRunner.class)
@Configuration(classes=TestConfig.class)
Class MockTest{
   private static final String jobName ="job";
   @Autowired JobLauncherTestUtils;
   @Autowired JobRegistry jobRegistry;
   @MockBean JobExplorer jobExplorer;
@Before
public void setUp(){
   Job job = jobRegistry.getJob(jobName);
   JobInstance jobInstance = new JobInstance(0L,job.getName());
   JobExecution jobExecution = new JobExecution(0L);
   jobExecution.setJobInstance(jobInstance);
}
@Test
public testMock(){
   //jobParams
   Data data = new Data();
   ExecutionContext context = new ExecutionContext();
   context.put("data",Data);
   jobExecution.setExecutionContext(context);
   when(jobExplorer.getJobExecution(any()).thenReturn(jobExecution);
   JobExecution jobExecution = testUtils.launchStep("stepname",context);
}
@After
public void tearDown(){
//statements
}

1 Ответ

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

Имейте в виду, что простое использование:

@Mock JobExecution jobExecution
public void setUp(){
    MockitoAnnotations.init(this);
}

не приводит к внедрению этого смоделированного экземпляра туда, где вы его ожидаете или где он объявлен как переменная экземпляра.

Этот код подходит, и вам не нужно использовать @RunWith(MockitoJunitRunner.class) поверх него.

Что вам нужно сделать, это вставить / установить jobExecution экземпляр вручную в @Test или * 1011.* метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...