[Springboot] Test Code

Jimin·2024년 9월 6일
0

SpringBoot 정리

목록 보기
6/6
post-thumbnail

JUnit5란?

자바 개발자가 많이 사용하는 테스팅 기반 프레임워크

assertj란?

다양한 assertions 세트와 유용한 오류 메시지를 제공해 테스트 코드 가독성을 향상시키는 JAVA 라이브러리

Mockito란?

JAVA용 오픈 소스 테스트 프레임워크
Mock을 간단하게 생성해주고 mock의 행동을 정하는 stubbing, 정상 작동하는지에 대한 verify 등 다양한 기능을 제공하는 프레임워크

테스트 코드의 장점

이번 프로젝트에서 기능을 개발할 때, 테스트 코드를 처음으로 짜게 되었다.
JUnit5 + assertj + Mockito 를 사용하였다.

테스트 코드를 작성하다 보니, 처음엔 몰랐던 다음의 테스트 코드의 장점에 대해 알게 되었다.

  1. 개발 과정 중 예상치 못한 문제를 미리 발견할 수 있다. -> 에러를 클라이언트 보다 빠르게 발견할 수 있다.
  2. 작성한 코드가 의도대로 작동하는지 검증할 수 있다.
  3. 코드 수정이 필요한 상황에서 유연하고 안정적으로 대응할 수 있다. -> 코드를 변경하더라도 테스트 코드가 수정된 코드를 검증해준다.

테스트에 사용되는 AOP

@Mock

  • Mockito에서 관리되는 가짜 객체, 껍데기를 생성한다.
  • 단위 테스트 용이다.
  • 실제 코드의 로직을 수행하지 않고, 테스트에서 원하는 결과를 반환하도록 설정할 수 있다.

@InjectMocks

  • Mockito에서 관리되는 애노테이션이다.
  • 해당 AOP가 붙여진 클래스가 껍데기가되고, 이후 만들어진 @Mock 애노테이션이 붙은 껍데기가 자동으로 주입된다.

@MockedStatic

  • Mockito 에서 관리되는 애노테이션이다.
  • staic 메소드를 mocking 하는데 사용된다.
  • 시간을 조절할 때 유용하다.

@MockBean

  • SpringBoot 테스트에서 제공하는 애노테이션
  • SpringContext(Container) 자체에 Mock을 생성해서 껍데기를 주입할 수 있다.
  • 통합테스트용이다.

@Autowired

  • Spring 프레임워크에서 제공하는 애노테이션
  • SpringContext, Spring이 실제로 관리하는 실제 빈을 주입할 수 있다.

조합

내가 사용한 기준이다.

  1. @InjectMocks + @Mock
  2. @Autowired + @MockBean

사용 방법

when().thenReturn();

when() 안에 껍데기 실행 조건을 작성하고, 이 때 반환되어야 하는 값을 반환해준다.

사용 예시

@MockBean 사용 예시

@MockBean
private CommonDao commonDao;
when(commonDao.insert("serviceClass.serviceMethod", paramMap)).thenReturn(1);
when(commonDao.update("serviceClass.serviceMethod", cancelReservationParamMap)).thenReturn(1);

@MockedStatic 사용 예시

MockedStatic<LocalDateTime> localDateTimeMockedStatic = Mockito.mockStatic(LocalDateTime.class, Mockito.CALLS_REAL_METHODS)
LocalDateTime editedNow = LocalDateTime.of(thisMonday.getYear(), thisMonday.getMonth(), thisMonday.getDayOfMonth(), 10, 0, 0);
localDateTimeMockedStatic.when(LocalDateTime::now).thenReturn(editedNow);

테스트 코드 작성 기본 Format

  • GIVEN : 어떤 데이터가 주어졌을 때
  • WHEN : 어떠한 기능을 실행하면
  • THEN : 어떠한 결과를 기대한다.
profile
https://github.com/Dingadung

0개의 댓글