SpringBoot #2.1.2 Test - JUnit, Mock

텐저린티·2023년 6월 26일
0

데브코스

목록 보기
14/41
  • 최신 SpringBoot에서는 Junit이 기본 내장되어 있으므로, 따로 의존성 설정을 해주지 않아도 됨.

기능

  • 단위 테스트마다 테스트 클래스 인스턴스 생성
    • 독립적인 테스트 가능
  • 어노테이션 제공
    • 테스트 라이프 사이클 관리
    • 테스트 코드 간결
  • 테스트 러너 제공
    • 다양한 환경에서 테스트 코드 작성
  • assert 로 테슽 케이스 수행결과 판별
  • 결과 성공 (녹색), 실패 (붉은색) 중 하나로 표시

JUnit 4

  • 단일 jar 파일 → 모노리틱 아키텍처

JUnit 5

JUnit Platform

  • JVM에 테스팅 프레임워크를 실행하기 위한 근간 제공
  • TestEngine 인터페이스
    • 테스트 발견, 실행, 결과 보고

JUnit Jupiter

  • TestEngine의 실제 구현체
  • Jupiner-api 사용해서 작성한 테스트 코드 발견, 실행

JUnit Vintage

  • junit4으로 작성된 테스트 코드는 Vintage에 들어가야 실행됨.
  • junit5으로 작성된 테스트 코드는 Jupiter에 들어가야 실행됨.

테스트 코드 작성

JUnit 테스트

  • Test에서만 사용하는 resources를 따로 생성 가능
    • test 디렉토리 하위에 resource 디렉토리 생성
  • @DisplayName : 이모티콘도 사용가능
  • @Disabled : 테스트 수행 비활성
  • @BeforeAll : 테스트 수행 시 단 한 번만 실행
  • @BeforeEach : 매 테스트마다 실행

Hamcrest 테스트

  • asserThat 테스트 api 사용
  • 원래 junit과 다르게 actual이 먼저 매개변수로 주어져야하므로, 직관적
  • 쉽게 여러 기능을 테스트할 수 있음.
    • 특히 컬렉션 관련해서 여러 좋은 api가 많이 있음.
  • equalTo = is ↔ not
  • hasSize(n)
  • everyItem()
  • greaterThan() / greaterThanOrEqualTo()
  • containsInAnyOrder()

Mock Object

  • 행위 검증 : 목 객체
    • 메소드 리턴값으로 판단할 수 없는 경우
    • 특정 동작을 수행하는지 확인하는 검증
  • 상태 검증 : stub
    • 메소드 수행 후, 객체 상태 확인하여 검증

Mock Object 생성을 도와주는 Test Framework

  • Mockito
  • JMock
  • EasyMock

Spring Test

@ContextConfiguration

  • Spring의 DI를 이용하면서 테스트하기 위해선 Configuration에 대한 Context를 테스트 클래스에서 가지고 있어야 함.
  • 위 어노테이션을 사용해 어플리케이션의 IoC Configuration Context를 가져와 사용할 수 있게 된다.
  • Context를 얻는 두 가지 방법

#1. 클래스를 선언하는 방법

@ContextConfiguration(classes = {AppConfiguration.class})
class 테스트클래스 {

#2. 해당 테스트 클래스 내에서만 사용하는 테스트용 Bean을 따로 만드는 방법

@ContextConfiguration
class 테스트클래스 {
	@Configuration
	static class Config {
		@Bean 
		빈클래스 빈클래스변수이름() {
			...

@ExtendWith(SprintExtend.class)

  • JUnit과 실제로 상호작용하면서 테스트를 수행하는 건 SprintExtend
  • 해당 어노테이션을 사용해서 SprintBoot 어플리케이션이 Test를 수행할 수 있도록 함.

@SpringJUnitConfig

  • 위의 두 어노테이션을 포함한 Spring-JUnit 테스트 Config 어노테이션

@ActiveProfiles({프로파일})

  • 해당 테스트 클래스가 profile인 상태로 테스트할 수 있도록 하는 어노테이션
profile
개발하고 말테야

0개의 댓글

관련 채용 정보