My Melody Is Cute Spring MVC 테스팅(Testing)3
본문 바로가기

개발공부🌷/Spring MVC

Spring MVC 테스팅(Testing)3

Mock

목업(Mock-up)

실제 제품이 나오기 전에 내부적으로 사용하기 위한 모형(가짜) 제품

테스트 세계에서는 가짜 객체

 

Mocking

단위 테스트나 슬라이스 테스트등에 Mock객체를 사용하는 것

 


🌟테스트에서 Mock객체를 사용하는 이유

 

Mock 객체를 사용하지 않고

MemberController 테스트중 postMember 테스트를 진행한다고 가정할때

 

1. MemberControllerTest 클래스의  postMemberTest()

2. MemberController 클래스의 postMember()

3. MemberService 클래스의 createMember()

4. MemberRepository 인터페이스의 save()

5. H2

6. 반대로 테스트 케이스까지 되돌아 감

 

postMember() 핸들러 메서드쪽만 테스트해야하는데

서비스계층과 데이터액세스계층, 데이터베이스까지 이어졌다가 돌아오기때문에 통합테스트에 가까움

 

  ✅   Mock 객체를 사용해서 다른 계층과 단절을 시켜줘서 이 과정을 줄여주고

슬라이스 테스트를 적용할 수 있도록 할 것

 

 

1. MemberControllerTest 클래스 내의 postMemeberTest()

2. Membercontroller 클래스 내의 postMember()

3. MockMemberService 클래스 내의 createMember()

4. 반대로 되돌아감

 


🌟Mockito

Mock 객체를 생성하고 해당 Mock객체가 진짜처럼 동작하게 하는 기능을 하는

Mocking framework( 라이브러리)

 

Mockito의 Mocking 기능을 이용해서 테스트하고자 하는 대상에서 다른 영역(다른 계층 또는 외부통신이 필요한 서비스등)을 단절시켜 오로지 테스트 대상에만 집중할 수 있게 함

 

🍀Mockito 지원 Stubbing 메서드

given(Mock 객체 클래스명.메서드명 (Mockito.any(객체타입.class))).willReturn(객체명)

 

✨Mock 객체인 해당 클래스로 해당 메서드를 호출하도록 정의함

Mockito.any() 는 어떤타입으로 호출될지 지정

.willReturn()은 위의 해당 메서드가 리턴할 Stub데이터

 

Stubbing

테스트를 위해서 Mock객체가 항상 일정한 동작을 하도록 지정하는 것

 

Stub

호출시 항상 정해진 행동을 하거나 정해진 데이터를 돌려주는 컴포넌트

주로 테스트에서 사용하기 때문에 Test Stub이라고 함

 


🌟슬라이스 테스트에 Mockito 적용

 

1. MemberController의 postMember() 테스트에 Mockito적용

 

@MockBean 애너테이션을 사용해서 가짜객체로 만들 Service클래스 지정후

필드에 DI

@Autowired애너테이션을 사용하여 Dto클래스를 감싸서 요청/응답을 처리할 mapper클래스를 필드에 DI

 

2. MemberService의 createMember() 테스트에 Mockito 적용

클래스 레벨에 @ExtendWith(MockitoExtension.class) 적용

-> Spring을 사용하지 않고 Junit에서 Mockito의 기능을 사용하겠다는 의미

 

@Mock 애너테이션을 사용하여 Mock객체로 만들 Repository 클래스 지정 후 필드에 DI

 

@InjectMocks 애너테이션을 사용하여 Mock 객체를 주입할 Service클래스 지정 후 필드에 DI

'개발공부🌷 > Spring MVC' 카테고리의 다른 글

Spring MVC Spring Rest Docs  (2) 2023.12.08
Spring MVC 테스팅(Testing) 2  (0) 2023.12.06
Spring MVC 테스팅(Testing)  (0) 2023.12.06
Spring MVC 트랜잭션(Transaction)  (0) 2023.12.05
Spring MVC JPA 2  (0) 2023.11.28