0

「JobLauncherTestUtils を使用してシングル ステップをテストしているときに、JobExecution をモックするにはどうすればよいですか?」

「試してみました

@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
}
4

1 に答える 1

1

単純に次を使用することに注意してください。

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

そのモック化されたインスタンスを、期待する場所、またはインスタンス変数として宣言されている場所に注入しません。

@RunWith(MockitoJunitRunner.class)このコードは問題なく、その上で使用する必要はありません。

あなたがする必要があるのは、あなたのまたはメソッドjobExecutionでインスタンスを手動で注入/設定することです。@Test@Before

于 2019-02-01T10:37:52.980 に答える