inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Chiến lược hoàn chỉnh Java hiệu quả Phần 1

Mục 3. Điểm chính 1 - Cách sử dụng constructor 1

Elvis, IElvis 질문이 있습니다.

478

gguu

2 câu hỏi đã được viết

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());
    }
}

java

Câu trả lời 1

0

communityai8509

안녕하세요, 인프런 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의 공식 문서를 참고하시면 도움이 될 것입니다. 감사합니다.

JAR파일 dependency 관련하여 질문드립니다.

0

229

2

선생님 작성한 정적 팩토리 메서드에 대해 의견 주실 수 있으실까요??

0

306

2

책에 쓰여 있는 스레드 안전에 대한 제 생각

0

295

2

프로젝트 설정 관련 질문

0

753

1

브릿지 패턴과 서비스 제공자 프레임워크 관계

0

280

1

[과제] EnumMap과 EnumSet가 HashMap과 HashSet보다 효율적인 이유

0

543

1

정적팩토리메소드와 ServiceLoader는 무슨 관계인가요?

0

346

1

강의 제목 오타 발견!!! 뚜둥

0

283

1

mvn install

1

458

1

강의 코드

0

486

2

Builder 필수값 질문입니다.

0

1044

1

EnumMap, EnumSet 정리

0

1003

1

HelloService 구현체

0

407

1

[과제] 강의 너무 만족스럽습니다.

0

716

1

PhantomReference 가 소멸되는 시점을 보는 코드 부분이 약간 이상한것 같습니다.

1

545

2

안녕하세요

2

682

1

객체 소멸에 관한 질문

0

544

0

정적 팩토리 메서드에 대해 질문이 있습니다.

0

542

0

Mock test 관련 질문입니다!

0

530

1

안녕하세요 선생님, 강의를 보고나서 Optional 소스코드를 뜯어보다가 어려운 부분이 있어서 질문 드립니다.

2

522

2

기선님 질문있습니다..

0

381

1

intellij의 equals 자동 생성 기능

1

521

1

Builder에 default값 추가하기

0

304

1

[과제] EnumMap, EnumSet

8

882

1