I have referred the answers to Mocking Objects Created Inside method Under test, How to mock objects created inside method? and other questions on net, but unable to understand why my solution is not working. My method to test is:
private AmazonS3 s3client; public int getBucketFileCount(String bucketNameForJsons) { if (s3client.doesBucketExistV2(bucketNameForJsons)) { log.info("Bucket name is not available."); return 0; } ObjectListing listing = s3client.listObjects(bucketNameForJsons); List<S3ObjectSummary> objectListing = listing.getObjectSummaries(); log.info("Counting s3client files"); return objectListing.size(); } The test case I have written is:
@Mock private AmazonS3 s3clientMock; @Mock private ObjectListing listingMock; private final String SAMPLE_BUCKET = "SAMPLE_BUCKET"; @InjectMocks private Accessor accessor; @Test public void testGetBucketFileCount() { s3clientMock = Mockito.mock(AmazonS3.class); listingMock = Mockito.mock(ObjectListing.class); //PowerMockito.when(s3clientMock.listObjects(anyString())).thenReturn(listingMock); //PowerMockito.doReturn(listingMock).when(s3clientMock).listObjects(anyString()); //PowerMockito.when(s3clientMock.listObjects(Matchers.any(String.class))).thenReturn(listingMock); List<S3ObjectSummary> objectListing = new ArrayList<>(); S3ObjectSummary objectSummary1 = Mockito.mock(S3ObjectSummary.class); S3ObjectSummary objectSummary2 = Mockito.mock(S3ObjectSummary.class); objectListing.add(objectSummary1); objectListing.add(objectSummary2); Mockito.doReturn(objectListing).when(listingMock).getObjectSummaries(); int actualSize = accessor.getBucketFileCount(SAMPLE_BUCKET); //Assert.assertNotEquals(actualSize, EXPECTED_SIZE); } I have tried mocking ObjectListing listing = s3client.listObjects(bucketNameForJsons); in the following ways:
PowerMockito.when(s3clientMock.listObjects(anyString())).thenReturn(listingMock);PowerMockito.doReturn(listingMock).when(s3clientMock).listObjects(anyString());PowerMockito.when(s3clientMock.listObjects(Matchers.any(String.class))).thenReturn(listingMock);
However, the value I get for ObjectListing listing = s3client.listObjects(bucketNameForJsons) is still null.
How do I make it take listingMock value?
Thanks.