Amy Bachir:
Je tente de se moquer un objet qui retourne un objet Java en option avec Mockito:
SomeObject someObject = new SomeObject();
Mockito.when(someSpringJpaRepository.findById(Mockito.any(UUID.class))).thenReturn(Optional.of(someObject));
Quand someSpringJpaRepository.findById(UUID)
est appelé, il retourne Optional.empty
.
Je me attends à la méthode findById()
pour revenir someObject
.
Toute raison pour laquelle il est de retour à la Optional.empty
place?
Voici la méthode:
public UUID saveOrder(OrderDTO orderDto) {
Order order = new Order();
if (orderDto.getId() != null) {
Optional<Order> result = orderRepository.findById(orderDto.getId());
if (result != null && result.isPresent()) {
order = result.get(); // existing record
} else {
order.setId(UUID.randomUUID());
}
} else {
// new record
order.setId(UUID.randomUUID());
}
return order.getId();
}
Et voici le Junit:
@Test
public void saveOrderTest(){
@Autowired
private OrderApiService orderApiService;
@Mock
private OrderRepository orderRepository;
OrderDTO orderDto = new OrderDTO();
UUID orderID = UUID.randomUUID();
Order order = new Order();
order.setId(orderID);
orderDto.setId(orderID);
Mockito.when(orderRepository.findById(Mockito.any(UUID.class))).thenReturn(Optional.of(order));
assertNotNull(orderApiService.saveOrder(orderDto));
}
Byebye:
Votre @Mock
en classe ne fait rien. Vous avez créé une instance distincte orderRepository
qui n'est pas injecté dans votre classe de service. Pour injecter votre maquette dans l' utilisation du contexte@MockBean
Différence entre @Mock
et @MockBean
ici