Mockito - вызов метода на объекте, возвращаемого методом CrudRepository save ()JAVA

Программисты JAVA общаются здесь
Anonymous
Mockito - вызов метода на объекте, возвращаемого методом CrudRepository save ()

Сообщение Anonymous »

Я пытаюсь написать тест на JUNIT для относительно базового класса, который отвечает за сохранение объекта с помощью CrudRepository Spring Data, а затем извлечение сгенерированного идентификатора из объекта и использования этого идентификатора в качестве ввода для некоторой логики. Я издевался над своим классом репозитория и использую стандарт, когда (). Then Return (), чтобы получить «сохраненную» сущность, но всякий раз, когда я пытаюсь позвонить методу, чтобы получить идентификатор сохраненной сущности, я получаю NullPointerException, сообщая мне, что сохраненная сущность - NULL.

Код: Выделить всё

@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

Вернуться в «JAVA»