Код: Выделить всё
@Service
public class OrderSchedulingService {
private final OrderEventHistoryRepository orderEventHistoryRepository;
private final ObjectMapper objectMapper = new ObjectMapper();
private final CommonUtils commonUtils;
public Integer processOrderScheduling(ConsumerRecord consumerRecord) throws JsonProcessingException, NullPointerException {
myMessage myMessage = objectMapper.readValue(consumerRecord.value(), MyMessage.class);
Payload payload = myMessage.getPayload();
String[] orderItemIds = payload.getOrderItemIds();
for (String orderItemIdStr : orderItemIds) {
Long orderItemId = Long.parseLong(orderItemIdStr);
OrderEvent event = commonUtils.getOrderEvent(myMessage, orderItemId, OrderEventCode.ORDER_SCHEDULED);
Long eventId = orderEventHistoryRepository.save(event).getEventId();
//do some other stuff with eventId
}
}
}
< /code>
Вот мой тестовый класс: < /p>
public class OrderSchedulingServiceTests {
@Mock
private OrderEventHistoryRepository orderEventHistoryRepository;
@Mock
CommonUtils commonUtils;
@Mock
private ObjectMapper objectMapper;
@InjectMocks
private OrderSchedulingService orderSchedulingService;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}
@Test
public void processOrderSchedulingSuccessTest() throws Exception {
ConsumerRecord consumerRecord = mock(ConsumerRecord.class);
String messageValue = "{\"action\":\"SCHEDULE_ORDER\", \"payload\":{\"orderId\":\"12345\", \"orderItemIds\": [\"1\", \"2\", \"3\"]}}";
MyMessage myMessage = mock(MyMessage.class);
OrderEvent orderEvent = mock(OrderEvent.class);
Long orderItemId = 1L;
Long eventId = 67890L;
when(consumerRecord.value()).thenReturn(messageValue);
when(objectMapper.readValue(consumerRecord.value(), myMessage.class)).thenReturn(myMessage);
when(commonUtils.getOrderEvent(omsMessage, orderItemId, OrderEventCode.ORDER_SCHEDULED)).thenReturn(orderEvent);
when(any(OrderEvent.class).getEventId()).thenReturn(eventId);
when(orderEventHistoryRepository.save(any(OrderEvent.class))).thenReturn(orderEvent);
// This line gives me a NullPointerException
when(orderEventHistoryRepository.save(orderEvent).getEventId()).thenReturn(eventId);
//more test code here
assertDoesNotThrow(() -> orderSchedulingService.processOrderScheduling(consumerRecord));
verify(orderEventHistoryRepository, times(1)).save(any(OrderEvent.class));
//other assertions
}
//Other Tests
}
< /code>
Какой правильный механизм, который можно получить здесь, вызов geteventid ()? В частности, эта строка:
when(orderEventHistoryRepository.save(orderEvent).getEventId()).thenReturn(eventId);Подробнее здесь: https://stackoverflow.com/questions/795 ... save-metho