Cześć,
w jaki sposób powinienem przetestować prosty serwis?
Czy powinienem testować wywołania metod? Argumenty z którymi ta metoda została wywołana? Zwracaną wartość?
Jeżeli wszystkie z powyższych to czy powinienem pakować je do jednego testu czy osobnych?
Przykład:
@Service
public class ClientServiceImpl implements ClientService {
private final ClientRepository clientRepository;
public ClientServiceImpl(ClientRepository clientRepository) {
this.clientRepository = clientRepository;
}
@Override
public Iterable<Client> findAll() {
return clientRepository.findAll();
}
@Override
public Client findOne(Long id) {
return clientRepository.findOne(id);
}
@Override
public Client save(Client client) {
return clientRepository.save(client);
}
@Override
public void remove(Long id) {
clientRepository.delete(id);
}
}
Jak powinny wyglądać testy tego serwisu?
public class ClientServiceImplTest {
private ClientService clientService;
@Mock
private ClientRepository clientRepository;
@Before
public void beforeEach() {
clientService = new ClientServiceImpl(clientRepository);
}
//Test wywołania metody
@Test
public void check_findAll_invoke_repository_method() {
clientService.findAll();
verify(clientRepository, times(1)).findAll();
}
//Test zwracanej wartości
@Test
public void check_findAll_return() {
Iterable<Client> value = new ArrayList<>();
when(clientRepository.findAll()).thenReturn(value);
Iterable<Client> result = clientService.findAll();
assertThat(result).isEqualTo(value);
}
//Test wywołania z argumentem
@Test
public void check_getById_invoke_repository_method() {
Long id = Long.valueOf(0);
clientService.findOne(id);
verify(clientRepository, times(1)).findOne(id);
}
}
adaszewski95adaszewski95