단위 테스트
✒️ 2025-05-28 11:40 내용 수정
하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트
- 하나의 모듈 = 각 계층에서의 하나의 기능 또는 메소드
- 해당 기능이 잘 작동하는지 독립적으로 테스트한다.
- ex) 게시판 만들기에서 id 중복 체크 기능만 따로 테스트
- 통합 테스트는 실제 프로젝트 내의 여러 Component 간의 상호작용을 테스트하기에 모든 Component들이 구동된 상태로 진행한다.
- 이 모든 Component를 실제 연결하고 테스트를 하기엔 시간이 오래 걸리기 때문에, 테스트하려는 부분만 독립적으로 진행하면 해당 단위를 유지 보수 혹은 리팩토링 하더라도 빠르게 확인할 수 있다.
- 다만 일반적인 어플리케이션은 하나의 기능을 처리하기 위해 다른 객체들과 데이터를 주고 받는 복잡한 통신이 일어나므로, 단위 테스트를 위해선 테스트를 하려는 기능과 연관된 모듈에 더미 데이터를 사용하여 독립 단위 테스트를 만들어야 한다.
단위 테스트 설정
- Annotation 기반 설정 파일#프로젝트 설정, 방명록 만들기대로 파일들 및 패키지를 준비한다.
- https://mvnrepository.com/artifact/org.springframework/spring-test 에 접속해서 원하는 버전의 Maven 항목을 pom.xml의 dependencies에 추가한다. (5.1.20 버전 사용)
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.20.RELEASE</version>
<scope>test</scope>
</dependency>
- https://mvnrepository.com/artifact/junit/junit 에 접속해서 4.12 버전 이상을 선택해 Maven 항목을 pom.xml의 dependencies에 추가한다. (4.12버전 사용)
- Spring TestContext Framework 5.1.20 버전 사용 시 junit 4.12 버전 이상을 요구한다.
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
- src/main/java 폴더에 dependency 패키지를 만들고, Coding 클래스와 Computer 클래스를 만든다.
package dependency;
import org.springframework.stereotype.Component;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Component
@RequiredArgsConstructor
@Getter
public class Coding {
// 코딩하려면 컴퓨터가 필요하다
private final Computer computer;
}
package dependency;
import org.springframework.stereotype.Component;
import lombok.Getter;
@Component
@Getter
public class Computer {
int ram;
}
- Context_3_dao 클래스에 객체를 생성한다.
- 수동 생성 대신 @ComponentScan Annotation을 사용해서 Context_3_dao에서 dependency에 있는 클래스를 모두 Bean으로 만듦
package context;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("dependency") //Context_3_dao에서 dependency에 있는 클래스를 모두 Bean으로 만듦
public class Context_3_dao {
}
- 이번엔 src/test/java 폴더에 dependency 패키지를 만들고, DependencyTest 클래스를 만든다.
| Annotation | 설명 |
|---|---|
@RunWith |
JUnit 프레임워크의 테스트 실행을 위해 Tomcat 대신에 Spring에 접근할 수 있도록 해줌 |
@ContextConfiguration |
설정 파일을 대신 읽어주는 Annotation |
@Log4j |
Log4j에 대한 로거가 자동으로 생성되고, 로깅을 수행하는 Annotation |
@Test |
Test에 사용될 메소드임을 알려주는 Annotation |
package dependency;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import context.Context_3_dao;
import lombok.extern.log4j.Log4j;
// JUnit 프레임워크의 테스트 실행 방법
// Tomcat 대신에 Spring에 접근할 수 있도록 해줌
@RunWith(SpringJUnit4ClassRunner.class)
// 설정 파일을 대신 읽어주는 Annotation
@ContextConfiguration(classes= {Context_3_dao.class})
@Log4j
public class DependencyTest {
@Autowired
private Coding coding;
// Test에 사용될 메소드임을 알려주는 Annotation
@Test
public void check() {
log.info("-----------------");
log.info("coding : " + coding);
log.info("computer : " + coding.getComputer());
log.info("ram : " + coding.getComputer().getRam());
log.info("-----------------");
}
}
- 상단 메뉴 바에서 Run - Run As - JUnit Test로 프로젝트를 실행한다.