테스트 메서드 내에서 생성 된 반환 값 (객체)을 모의합니다.

후추 :

나는 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 값을 가져 오려면 어떻게해야합니까?

감사.

GhostCat :

우선, 이미 주석을 사용하고 있기 때문에 너무 복잡합니다.

@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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

runSync 메서드에서 생성 된 객체의 값을 반환합니다.

객체에서 생성된 화살표 함수는 .call() 메서드를 사용하여 호출될 때 정의되지 않은 값을 반환합니다.

Django / Python-각 객체에 할당 된 생성 된 값에서 정렬 된 목록을 반환합니다.

객체 자체에서 나오는 값을 반환하기 위해 객체의 속성을 모의합니다.

호출 된 메서드의 이름을 반환하는 Ruby 객체를 생성합니다.

테스트중인 메서드 내부에 생성 된 모의 개체

JUnit에서 테스트 된 클래스의 메서드의 반환 값을 설정할 수 있습니까?

테스트 중인 메소드에서 생성된 객체의 값을 확인하는 방법은 무엇입니까?

PHPunit 테스트 중 메소드 내부에서 생성된 객체 모의하기

전달 된 값으로 구성 요소 메서드의 반환 된 값 테스트

YUI3의 get () 메서드에서 반환 된 값을 테스트하는 방법은 무엇입니까?

CASE 문에서 임의로 생성 된 값이 NULL을 반환합니다.

Sails.js는 루트 객체에서 생성 된 API를 반환합니다.

객체가 아닌 생성자에서 독립형 값을 반환합니다.

ajax 요청에서 반환된 데이터로 입력 "값" 속성을 업데이트합니다... [객체, 개체]에 전달합니다. - 장고/파이썬

Jest를 사용하여 속성 개체에서 익명 함수의 중첩 된 반환 값을 자세히 테스트합니다.

Javascript의 for 루프에서 생성 된 값을 기반으로 객체 필터링

Python yield : 생성기 내에서 계산 된 다른 값을 반환하거나 액세스

객체 내부에서 메서드가 다른 메서드의 반환 값을 사용할 수 있습니까?

WebDriver의 executeScript는 JavaScript 메서드에서 반환 된 값 대신 경고 텍스트를 반환합니다.

UnitTest - 테스트된 메서드는 항상 빈 맵을 반환합니다.

powermockito가 아닌 mockito로만 테스트중인 메서드 내에서 생성 된 객체를 모의하는 방법은 무엇입니까?

모의 객체의 메서드가 인터페이스 다운 캐스트 후 null을 반환합니다.

변환에서 람다로 생성된 객체 반환

NUnit 생성 모의 저장소는 다른 테스트 케이스에서 동일한 객체를 반환합니다.

모의 컨트롤러 개체 메서드는 결과에 Null 값을 반환합니다.

자바 스크립트에서 중첩 된 객체를 비교하고 키 동등성을 반환합니다.

Spring MVC의 예정된 메소드에서 값을 반환해야합니다.

생성된 인터페이스 메서드의 반환 유형에 대한 Mono 값 추출/구독

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관