Я пытаюсь проверить класс ниже, который является читателем Spring Batch.Мой тест возвращает ноль, когда response.getBody () вызывается из теста в тесте.
Мой класс Java:
@Value("${rest.basepath}")
private String apiURI;
private int nextEmailIndex;
private RestTemplate restTemplate;
private List<EmailEntity> EmailEntityIterator;
private static final Logger logger = Logger.getLogger(EmailItemReader.class.getName());
/**
* Constructor
* @param restTemplate
* The RestTemplate class allows us to call a
* rest end point within the batch
*/
EmailItemReader(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
nextEmailIndex=0;
}
/**
* Checks if the list of emails is empty
* Populates it by fetching unread emails
* @return EmailEntity
*/
@Override
public EmailEntity read(){
if (isEmailEntityInitialised()) {
EmailEntityIterator = fetchEmails();
}
EmailEntity nextEmail = null;
if (nextEmailIndex < EmailEntityIterator.size() && nextEmailIndex < 50) {
nextEmail = EmailEntityIterator.get(nextEmailIndex);
nextEmailIndex++;
}
System.out.println("The email index :- " + nextEmailIndex);
return nextEmail;
}
/**
* Returns a list of unread emails
* @return List<EmailEntity>
*/
private List<EmailEntity> fetchEmails() {
restTemplate.setMessageConverters(getMessageConverters());
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON_UTF8));
HttpEntity<String> entity = new HttpEntity<>(httpHeaders);
ResponseEntity<EmailEntity[]> response =
restTemplate.exchange(apiURI, HttpMethod.GET, entity, EmailEntity[].class, 100);
EmailEntity[] partialEmailEntity = response.getBody();
List<EmailEntity> partialEmailEntityList = Arrays.asList(partialEmailEntity);
List<EmailEntity> EmailEntityList = new ArrayList<>();
for (EmailEntity EmailEntity: partialEmailEntityList) {
logger.info("The UUID :" + EmailEntity.getUuid() );
ResponseEntity<EmailEntity> fullResponce =
restTemplate.exchange(apiURI+EmailEntity.getUuid(), HttpMethod.GET, entity, EmailEntity.class, 100);
EmailEntity fullEmail = fullResponce.getBody();
EmailEntityList.add(fullEmail);
logger.info("The full email : "+ fullEmail);
}
printEmailsToLogs(EmailEntityList);
return EmailEntityList;
}
** Пожалуйста, посмотрите мой тест ниже, я пытался смоделировать мой restTemplate
, но ответ все равно будет возвращаться с нулевым указателем **
@ContextConfiguration
@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class,
StepScopeTestExecutionListener.class })
@RunWith(SpringJUnit4ClassRunner.class)
public class EmailItemReaderTest {
@Mock
private RestTemplate restTemplate;
@InjectMocks
private EmailItemReader reader;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
@Test
public void read() {
PlainContent plainContent = new PlainContent();
plainContent.setData("test");
RawEmail rawEmail = new RawEmail();
rawEmail.setData("Raw email");
EmailEntity mockEntity1 = new EmailEntity();
mockEntity1.setBody(plainContent);
mockEntity1.setContactNumberRequired(true);
mockEntity1.setContactNumber("0000000000");
mockEntity1.setStructured(true);
mockEntity1.setSubjectActive(true);
mockEntity1.setConfigEmailSubjectId(1);
mockEntity1.setSubjectLine("subject");
mockEntity1.setRawEmail(rawEmail);
EmailEntity[] testArray = new EmailEntity[1];
testArray[0] = mockEntity1;
ResponseEntity<EmailEntity[]> mockEntity = Mockito.spy(new ResponseEntity(HttpStatus.OK));
Mockito.doReturn(mockEntity).when(restTemplate).exchange(
Mockito.any(URI.class),
Mockito.any(HttpMethod.class),
Mockito.any(HttpEntity.class),
Mockito.eq(Class[].class)
);
reader.read();
Mockito.verify(restTemplate).exchange(Mockito.any(URI.class),Mockito.any(HttpMethod.class),Mockito.any(HttpEntity.class), Mockito.eq(EmailEntity[].class));
}
}
Пожалуйста, помогите с любой информацией или предложениями, которые могут помочь.Спасибо заранее.