빗썸 테크 아카데미/TIL

6일차

민철킹 2021. 8. 27. 16:16

목업 테스트

@SpringBootTest는 Loosly Coupled에 위반되는 사항이 많아서 @ExtendWith 애노테이션을 적용시키고 Mockito를 사용한 목업 테스트를 진행한다.

 

@SpringBootTest통합 테스트시에 사용한다. 단위 테스트시에 사용하는 것은 좋지 않다. 단위 테스트 시에 사용할 때는 classes 옵션을 통해 딱 필요한 클래스(스프링 빈)만 가져와서 사용해야한다.

 

가짜 목 객체를 만들어준다.(@Mock) 그 후 생성자를 사용해 위와 같이 사용할 수 있는데 다른 예시를 살펴보자.

생성자 주입과 유사한 코드이다.

@Mock
private OrderRepository orderRepository

@BeforeEach
void setUp() {
	OrderService orderService = new OrderService(orderRepository);
}

이를 좀 더 간결하게 사용할 수 있도록 지원하는 애노테이션이 바로 @InjectMocks이다.

@Mock
private OrderRepository orderRepository;

@InjectMocks
private OrderService orderService;

이 두 코드는 기능적으로 동일하다.

 

SpringFramework 내부에 위치한 @MockBean이라는 애노테이션도 존재하는데 여기는 어떤 차이점이 있을까?

 

@MockBean을 사용하면 객체 내에 기존 등록된 Bean이 아닌 MockBean 즉, 가짜 빈을 주입해준다.

 

이는 @SpringBootTest, @WebMVCTest와 함께 사용하며 Mock과 마찬가지로 mock객체의 행위를 정의해줄 수 있다.

 

결론적으로 컨테이너가 테스트 시에 필요하고, Bean이 컨테이너에 존재한다면 @MockBean을 사용하고 그렇지 않은 경우에는 @Mock을 사용한다.

 

랜덤 숫자를 생성하는 GeneratorService를 목 객체로 만들고 QuizService에 주입해준다.

 

그 후 give을 통해 랜덤 숫자를 생성하고 willReturn을 통해 50, 30이 반환되도록 하였다.

그 후 Quiz내의 result(result = a * b)를 검증한다.

 


Spring Security

 

 

반응형

'빗썸 테크 아카데미 > TIL' 카테고리의 다른 글

8일차  (0) 2021.08.30
7일차  (0) 2021.08.29
5일차  (0) 2021.08.25
4일차  (0) 2021.08.24
3일차  (0) 2021.08.20