일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 에이치엘비
- 코드스테이츠 합격
- Gamsgo
- 해시
- 코드스테이츠 부트캠프 합격 후기
- codestates 국비지원 1기 합격 후기
- 백내장
- 겜스고
- 코테 합격후기
- 코드스테이츠 백엔드 부트캠프 합격
- 금융감독원
- 백내장 금감원
- CodeState 후기
- 백준 알고리즘
- 코드스테이츠 부트캠프
- 코드 스테이츠 백엔드 교육과정
- 보험금 지급거절
- 자바
- HLB
- 코드스테이츠 합격 후기
- 코드스테이츠 백엔드 후기
- Java
- Spring
- Code States 백엔드 합격 후기
- 금감원
- 메서드
- 금감원 백내장 민원
- 금융감독원 민원신청
- 코드스테이츠 백엔드 교육과정
- 백내장 다초점렌즈 삽입술
Archives
- Today
- Total
개발하는 동그리
[Test] Mockito 본문
반응형
[중요 내용]
- 테스트의 단위는 작을수록 좋다.
Mockito 란?
- Mock 객체로 Mocking을 할 수 있게 해주는 라이브러리가 바로 Mockito
- Mock 객체를 사용하면, Controller 계층에서 실제 Service. Repository에 접근하지 않고 Mock Service 객체를 이용해 데이터 베이스에 접근할 수 있다. 즉 계층을 단절시켜 불필요한 과정을 줄일 수 있다.
Mockito.mock() 메서드
아래와 같이 클래스 또는 인터페이스의 모의 객체를 만들 수 있다.
UserRepository localMockRepository = Mockito.mock(UserRepository.class);
해당 인스턴스의 메서드에 대한 반환값을 스텁하고 호출되었는지 확인할 수 있다.
Mockito.when(localMockRepository.count()).thenReturn(111L);
@Mock
- Mockito.mock()의 약어이다.
- 테스트 클래스에서만 사용할 수 있다.
- @Mock 사용할 경우 오류 메세지에 필드값이 나타나서 오류를 찾기 쉽다.
@Mock
UserRepository mockRepository;
@MockBean
- Spring Application context에 mock객체를 추가할 수 있다. ( 동일한 유형의 기존의 빈을 대체 )
- 동일한 유형의 bean이 등록되어 있지 않을 경우엔 새로운 bean 등록
- 외부서비스와 같은 특정 빈에서 통합테스트에 유용하다.
- @MockBean을 사용하기 위해서는 SpringRunner를 사용해서 실행해야 한다.
- count() 메서드를 스텁하기위해 UserRepository를 사용했다
@RunWith(SpringRunner.class) // JUnit 테스트에 주석 추가
public class MockBeanAnnotationIntegrationTest {
@MockBean
UserRepository mockRepository;
@Autowired
ApplicationContext context;
@Test
public void givenCountMethodMocked_WhenCountInvoked_ThenMockValueReturned() {
Mockito.when(mockRepository.count()).thenReturn(123L);
UserRepository userRepoFromContext = context.getBean(UserRepository.class);
long userCount = userRepoFromContext.count();
Assert.assertEquals(123L, userCount);
Mockito.verify(mockRepository).count();
}
}
Stub이란!?
- 정의되어있지 않거나, 구현되지 않은 함수
- 테스트중 준비된 호출에 대한 준비된 답을 제공하고 그 외에 항목에는 응답하지 않는다.
- 복잡한 논리 흐름을 단순화할 목적으로 사용
- 입력값과 리턴값을 입력!
반응형
'IT 정보 > Spring' 카테고리의 다른 글
[Spring MVC] API 문서화 (16) | 2022.07.18 |
---|---|
[Spring] 스프링 MVC 정리 (1) (10) | 2022.07.16 |
[Test] TDD (Test-Driven Development) (12) | 2022.07.14 |
[스프링 부트와 JPA 활용] 2편 (0) | 2022.07.14 |
[Spring] JUnit Test 기능 (18) | 2022.07.12 |