【发布时间】:2019-09-09 12:14:59
【问题描述】:
我有一个带有@BeforeStep 函数的自定义阅读器,用于初始化一些数据。这些数据来自外部数据库。
@Component
public class CustomReader implements ItemReader<SomeDTO> {
private RestApiService restApiService;
private SomeDTO someDTO;
@BeforeStep
private void initialize() {
someDTO = restApiService.getData();
}
@Override
public SomeDTO read() {
...
return someDTO
}
}
在我的单元测试中,我需要模拟对外部数据库的调用。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = NedBatchApplication.class)
public class CustomReaderTest {
@Autowired
CustomReader customReader;
@Mock
RestApiService restApiService;
@Before
private void setup() {
MockitoAnnotations.initMocks(this);
ReflectionTestUtils.setField(customReader, "restApiService", restApiService);
Mockito.when(restApiService.getData().thenReturn(expectedData);
}
}
我面临的问题是@BeforeStep 在单元测试的@Before 之前执行,当我启动我的测试时。所以 restApiService.getData() 返回 null 而不是 expectedData。
有没有办法实现我想要的,或者我需要用不同的方法来实现它?
【问题讨论】:
标签: java mockito spring-batch spring-boot-test