Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 깃허브
- 부트캠프
- HashSet
- 캡슐화
- 코드업
- @builder
- 브랜치
- 알고리즘
- @AllArgsConstructor
- 상속
- lv1
- 자바
- 부스트코스
- 에러
- CRUD
- 기본생성자
- 프로그래머스
- github
- 파이썬
- stringbuffer
- html tag
- Codeup
- Python
- HTML
- entity
- DTO
- @NoArgsConstructor
- SQL
- java
- git
Archives
- Today
- Total
잉?
[SpringBoot] 단위 테스트를 위한 Mockito? 그게 뭔데? 본문
Mockito란?
단위 테스트를 위한 프레임워크이다.
가짜 객체인 Mock을 생성해 주고 관리하고 검증할 수 있도록 지원해 주는 프레임워크이다.
service의 update메서드를 테스트하기 위해서는 service 객체를 생성할 때 필요한 repository를 전달해 줘야 한다.
하지만 이러한 인터페이스들을 어떻게 전달해야하는지 막막할 때 Mockito를 사용한다고 보면 된다.
Mock object(가짜 객체)?
개발한 프로그램을 테스트할 때 테스트를 수행할 모듈과 연결되는 다른 모듈을 흉내 내는 가짜 모듈을 생성하는 객체이다. 분리되기 어려운 클래스들을 가짜객체를 통해 분리한다.
여기서 분리되기 어려운 클래스들의 예시로는 Controller, Service, Repository가 있다.
Controller 클래스를 테스트하기 위해서는 Controller, Service, Repository를
Service 클래스를 테스트하기 위해서는 Service, Repository를
Repository 클래스를 테스트하기 위해서는 Repository를 테스트해야 한다.
뒤에 딸려오는 클래스를 가짜객체(Mock Object)를 통해 분리해 준다.
Service 클래스를 테스트하기 위해 MockRepository를 만들어 주는 것이다.
겉만 같은 가짜 repository인 것이다.
@ExtendWith(MockitoExtension.class) // @Mock 사용을 위해 설정합니다.
class ProductServiceTest {
@Mock // 이렇게 @Mock을 사용하여 mock 객체를 생성한다.
ProductRepository productRepository;
@Mock
FolderRepository folderRepository;
@Mock
ProductFolderRepository productFolderRepository;
@Test
@DisplayName("관심 상품 희망가 - 최저가 이상으로 변경")
void test1() {
// given
Long productId = 100L;
int myprice = ProductService.MIN_MY_PRICE + 3_000_000;
ProductMypriceRequestDto requestMyPriceDto = new ProductMypriceRequestDto();
requestMyPriceDto.setMyprice(myprice);
User user = new User();
ProductRequestDto requestProductDto = new ProductRequestDto(
"Apple <b>맥북</b> <b>프로</b> 16형 2021년 <b>M1</b> Max 10코어 실버 (MK1H3KH/A) ",
"https://shopping-phinf.pstatic.net/main_2941337/29413376619.20220705152340.jpg",
"https://search.shopping.naver.com/gate.nhn?id=29413376619",
3515000
);
Product product = new Product(requestProductDto, user);
ProductService productService = new ProductService(productRepository, folderRepository, productFolderRepository);
given(productRepository.findById(productId)).willReturn(Optional.of(product));
// when
ProductResponseDto result = productService.updateProduct(productId, requestMyPriceDto);
// then
assertEquals(myprice, result.getMyprice());
}
'자바(Java) > 스프링부트(SpringBoot)' 카테고리의 다른 글
[SpringBoot] 회원가입 예외처리 하기(statusCode:400) + 인텔리제이 디버깅 (0) | 2023.08.01 |
---|---|
[SpringBoot] 단위 테스트(Unit Tests)는 뭔데? + 사용 이유 (0) | 2023.07.25 |
[SpringBoot] Service단에서의 DTO <--> Entity의 변환. (0) | 2023.07.11 |
[SpringBoot] Entity란? + @Table, @NoArgsConstructor, @AllArgsConstructor (0) | 2023.07.10 |
[SpringBoot] 빌더 패턴의 “toEntity”와 “of” 메서드 (0) | 2023.07.04 |
Comments