Reputation: 403
So I am making Spring boot Tests on my Rest API and I am struggling a lot. When I search for tests on my service class and I try them, they mostly do not work or my SonarQube does not say the delete method in my service class is tested. That is why I came here and wanted an example of a propper delete unit test that works and covers the code. If I have this test, I can move on and try to make the other tests myself.
This is my Service class:
@Service
@Transactional
public class PartyLeaderService {
@Autowired
private PartyLeaderRepository partyLeaderRepository;
@Autowired
ModelMapper modelMapper;
public List<PartyLeader> listAllPartyLeaders() {
return partyLeaderRepository.findAll();
}
public void savePartyLeader(PartyLeaderDto partyLeaderDto) {
PartyLeader partyLeader = convertToEntity(partyLeaderDto);
partyLeaderRepository.save(partyLeader);
}
public PartyLeaderDto getPartyLeader(Integer id) {
PartyLeader partyLeader = partyLeaderRepository.findById(id).orElse(null);
return convertToDto(partyLeader);
}
public void deletePartyLeader(Integer id) {
partyLeaderRepository.deleteById(id);
}
public void deleteAllLeaders() {
partyLeaderRepository.deleteAll();}
private PartyLeaderDto convertToDto(PartyLeader partyLeader) {
PartyLeaderDto partyLeaderDto = modelMapper.map(partyLeader, PartyLeaderDto.class);
return partyLeaderDto;
}
private PartyLeader convertToEntity(PartyLeaderDto partyLeaderDto) {
PartyLeader entity = new PartyLeader();
entity.setId(partyLeaderDto.getId());
entity.setName(partyLeaderDto.getName());
entity.setApperance(partyLeaderDto.getApperance());
return entity;
}
}
I also would like it to mock the test so that nothing get's actually deleted in my database. Can anyone help me? Thanks in advance!
Upvotes: 0
Views: 2806
Reputation: 355
Try to use any mocking framework like Mockito.
For example, you will find the required solutions on these two pages https://www.tutorialspoint.com/mockito/mockito_junit_integration.htm https://www.tutorialspoint.com/mockito/mockito_verifying_behavior.htm
So basically, your test will look something like
@RunWith(MockitoJUnitRunner.class)
public class PartyLeaderServiceTest {
@InjectMocks
PartyLeaderService partyLeaderService = new PartyLeaderService();
@Mock
ModelMapper ModelMapper;
@Mock
PartyLeaderRepository partyLeaderRepository;
@Test
public void testAdd(){
// for given input
final Integer id = 223;
// when the desired action performed
partyLeaderService.deletePartyLeader(id);
// then verify
Mockito.verify(partyLeaderRepository).deleteById(id);
}
}
Ad off-course don't forget to add Mockito dependency
Upvotes: 1