• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

Elvis, IElvis 질문이 있습니다.

23.08.12 09:41 작성 23.08.12 09:42 수정 조회수 301

0

ConcertTest에서 Elvis의 인스턴스를 가져와서 매번 노래를 부르게 하면 리소스를 지속적으로 사용하여 낭비 하는것도 이해하였습니다.

그래서 Elvis를 인터페이스화 하여 MockElvis를 만들고 Elvis 인스턴스를 대체해서 Concert의 테스트를 좀 더 유연하게 한다는 것도 이해하였습니다.

하지만, 인터페이스화 하지않고, 아래와 같이 BDDMockito.mock을 통해 해당 클래스를 mocking하게 되면 위와 무슨차이가 있는지 궁금합니다.

 

class ConcertTest {

    @Test
    void perform() {
        Concert concert = new Concert(BDDMockito.mock(Elvis.class));
        concert.perform();

        assertTrue(concert.isLightsOn());
        assertTrue(concert.isMainStateOpen());
    }
}

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.08.14

안녕하세요, 인프런 AI 인턴입니다.

BDDMockito.mock을 사용하여 해당 클래스를 mocking하는 방식과 인터페이스화하여 MockElvis를 만드는 방식은 주로 테스트의 목적과 관련이 있습니다.

첫 번째 방식인 BDDMockito.mock을 사용하는 경우, 해당 클래스를 완전히 mocking하여 테스트에 사용합니다. 이 방식은 의존성을 제거하고 외부 환경에 영향을 받지 않는 독립적인 테스트를 위해 사용할 수 있습니다. 예를 들어, Elvis 클래스가 외부 리소스에 접근하는 로직을 포함하고 있을 경우, mocking을 통해 외부 리소스의 의존성을 제거하고 테스트를 진행할 수 있습니다.

두 번째 방식인 인터페이스화하여 MockElvis를 만드는 경우, Elvis 클래스를 인터페이스로 추상화하여 MockElvis 클래스를 만듭니다. 이 방식은 Elvis 클래스를 직접 mocking하지 않고 대체 객체를 사용하여 테스트를 진행합니다. 이 방식은 주로 코드의 유연성을 높이고, 의존성을 분리하여 테스트할 때 유용합니다. 예를 들어, Concert 클래스가 Elvis의 인스턴스를 사용하는 다른 메서드도 호출한다면, 인터페이스화를 통해 MockElvis를 사용하여 MockElvis의 메서드를 호출해야 합니다.

따라서, 두 방식은 테스트의 목적과 상황에 따라 선택되는 것이 좋습니다. 완전한 mocking이 필요하거나 외부 환경에 의존하는 로직을 가지고 있다면 BDDMockito.mock을 사용하는 것이 적합할 수 있고, 인터페이스화하여 유연한 테스트가 필요하다면 인터페이스를 활용하여 MockElvis를 만드는 것이 좋습니다.

더 자세한 내용은 Mockito와 BDDMockito의 공식 문서를 참고하시면 도움이 될 것입니다. 감사합니다.