mardi 17 mars 2020

Void Method in Service is not Mocking in Integration Testing

In my spring boot project, one of my Service depends on external service like Amazon. I am writing the integration testing of the Controller classes. So, I want to mock the method in the AmazonService class(as it depends on third party API). The method is void with a single Long argument and can throw a custom application-specific exceptions.

The method is as follows:-

class AmazonService{
public void deleteMultipleObjects(Long enterpriseId) {
        String key = formApplicationLogokey(enterpriseId,null);
        List<S3ObjectSummary> objects = getAllObjectSummaryByFolder(key);
        List<DeleteObjectsRequest.KeyVersion> keys = new ArrayList<>();
        objects.stream().forEach(object->keys.add(new DeleteObjectsRequest.KeyVersion(object.getKey())));
        try{
            DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(this.bucket).withKeys(keys);
            this.s3client.deleteObjects(deleteObjectsRequest);
            log.debug("All the Application logos deleted from AWS for the Enterprise id: {}",enterpriseId);
        }
        catch(AmazonServiceException e){
            throw new AppScoreException(AppScoreErrorCode.OBJECT_NOT_DELETED_FROM_AWS);
        }
    }}

I have tried various approaches to Mock this method but it didn't work and control is going inside this method during debugging. I want to do nothing in this method during testing. I have tried the various approaches like throw(), doNothing(), spy() etc.

Please help what is missing here?

Thanks

Aucun commentaire:

Enregistrer un commentaire