나는 Mocking Objects Created Inside method Under test , How to mock objects created inside method?에 대한 답변을 참조했습니다 . 및 기타 질문이 있지만 내 솔루션이 작동하지 않는 이유를 이해할 수 없습니다. 내 테스트 방법은 다음과 같습니다.
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();
}
내가 작성한 테스트 케이스는 다음과 같습니다.
@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);
}
ObjectListing listing = s3client.listObjects(bucketNameForJsons);
다음과 같은 방법으로 조롱 을 시도했습니다 .
PowerMockito.when(s3clientMock.listObjects(anyString())).thenReturn(listingMock);
PowerMockito.doReturn(listingMock).when(s3clientMock).listObjects(anyString());
PowerMockito.when(s3clientMock.listObjects(Matchers.any(String.class))).thenReturn(listingMock);
그러나 내가 얻는 값 ObjectListing listing = s3client.listObjects(bucketNameForJsons)
은 여전히 null입니다.
ListingMock 값을 가져 오려면 어떻게해야합니까?
감사.
우선, 이미 주석을 사용하고 있기 때문에 너무 복잡합니다.
@Mock
private AmazonS3 s3clientMock;
그럼 그 점을 고수 해야합니다. 의미 : @RunWith 또는 Mockito.initMocks 를 사용 하십시오 . 하지만 당신은 절대적으로해야 하지 이렇게 s3clientMock = Mockito.mock(AmazonS3.class);
다시 . (직접적으로 아프지는 않지만 여기서 할 때 이상한 효과가 생길 수 있지만 다른 방법에서는 다르게 할 수 있습니다)
그렇다면 여기에서는 PowerMock (ito)를 전혀 사용할 필요가 없습니다. 모의 두 개가 있고 각각에 대해 호출을 제어하고 메서드를 사용하려고합니다.
그래서 간단합니다.
when(s3clientMock.listObjects(any())).thenReturn(listingMock);
when(listingMock.getObjectSummaries()).thenReturn(someList);
해야 할 것. someList
이 될 것입니다 List<S3ObjectSummary>
.
그런 다음 갈 수 있습니다.
assertThat(accessor.getBucketFileCount(SAMPLE_BUCKET), is(someList.size())
예를 들면.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다