I have the following function that I want to write unit test for:
@SpringBootTest
@RunWith(SpringRunner.class)
public class MyMessageServiceTests {
@Autowired
MyMessageService myMessageService;
@MockBean
MyMessageRepository myMessageRepository;
public List<MyMessage> updateAndSelect() {
UUID uuid = UUID.randomUUID();
String identifier = uuid.toString();
myMessageRepository.updateForSelect(identifier);
//a private method of the service that returns records based on identifier
return findAllByIdentifier(identifier);
}
}
The function first updates records and puts a UUID against them and then reads the records based on that UUID identifier, Now I cant Mock UUID obviously but when I run the following unit test the verify fails because the method findAllByIdentifier is actually called with a different UUID then I am passing in, because updateAndSelect creates a new UUID within itself
@Test
public void testUpdateAndSelect(){
UUID uuid = UUID.randomUUID();
String identifier = uuid.toString();
when(myMessageRespository.findAllByIdentifier(identifier)).thenReturn(myMessages);
when(serviceUUID.randomUUID()).thenReturn(uuid);
myMessageService.updateAndSelect();
verify(myMessageRespository).findAllByIdentifier(identifier);
}