ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TDD 예제 2 - Mockito
    JAVA/TDD 2022. 4. 22. 10:15
    728x90

    Mock : 프로그래머가 직접 행동을 관리하는 객체. 진짜 객체와 똑같이 움직이지만 실제로 구현되지 않음.

    Mockito : Mock 객체를 쉽게 만들고, 관리하고, 검증할 수 있는 방법을 제공하는 프레임워크.

     

    참고 : Mockito란? Mockito 사용하기

     

    Mockito란? Mockito 사용하기

    Mockito란? · Mock 객체를 쉽게 만들고, 관리하고, 검증할 수 있는 방법을 제공하는 프레임워크  - Mock: 진짜 객체와 비슷하게 동작하지만, 프로그래머가 직접 행동을 관리하는 객체  - 공홈 https://si

    scshim.tistory.com


    build.gradle 설정

    testImplementation 'org.mockito:mockito-core:3.11.2'
    testImplementation 'org.mockito:mockito-junit-jupiter:3.11.2'


    mock으로 생성한 class를 실 객체처럼 사용

    @Test : Test Method를 지정.

    @DisplayName : build test시 목록에서 메소드명 대신 출력하는 이름

     

    1. ArrayList를 mock 객체 (가상의 객체)로 만듦.

    2. mock으로 생성된 객체에 실제 list에 넣는 방식으로 값을 넣음.

    3. 하지만 실제 ArrayList는 null 이므로 값이 들어 갈 수 없음.

     

    메소드 대신 @DisplayName에 적은 값이 리스트에 나온다.

    Expected는 assertEquals에 적은 apple이지만,

    실제 mock 객체로 생성된 ArrayList는 null이므로 Actual은 null로 표시되어 test가 실패한다.


    mock 으로 생성한 객체에 사용할 메소드의 인자값고 리턴값을 미리 정의함.

    1. ArrayList를 mock 객체 (가상의 객체)로 만듦.

    2. when()을 통해 어떤 메소드를 사용할 때를 지정, thenReturn() 을 통해 반환 값을 지정. 

    - get(anyInt()) 이기 때문에 get()메소드에 인자값이 어떤 숫자이던 thenReturn 에 있는 값이 반환 된다.

    3. 위 when thenReturn 메소드로 지정된 get()메소드를 실제 사용. 

    4. assertEquals를 통해 예상값과 실제값을 비교

    assertEquals에 예상값인 apple과 when thenReturn에 정의한 apple 값을 비교하였으므로 test에 성공한다.


    하나의 메소드에 여러개의 when thenReturn 를 지정 할 수 있다.

    get() 메소드로 정의된 값은 같으나, 10으로 리턴하기로 한 size()메소드를 9로 예상했기 때문에 test가 실패로 나온다.


    Mockito test를 위한 객체생성

    1. 실제로 정의한 MockTestClass를 mock을 통해 가상의 객체로 생성.

    2. return값이 void인 메소드는 when thenReturn을 사용 할 수 없다.

    3. doNothing()이라는 메소드를 사용하여 return 값이 void인 메소드를 정의 할 수 있다.

    4. 실제로 값을 집어넣는 메소드를 작성하지만 MockTesetClass는 실제 객체가 아니기 때문에 get메소드와 예상값을 비교 할 수 없다.

    5. 4.번의 이유로 assertEquals() 대신 verify() 를 사용하여 해당 메소드가 실행 되었는지 확인한다.

    성공


    전체 메소드 실행

     

    728x90
    반응형
    LIST

    'JAVA > TDD' 카테고리의 다른 글

    TDD 예제 1  (0) 2022.04.21
    TDD  (0) 2022.04.21

    댓글

Designed by Tistory.