LardinoisJosse
LardinoisJosse

Reputation: 403

How to make a delete test on my service class?

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

Answers (1)

Bhargav Mummini
Bhargav Mummini

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

Related Questions