Junit
: Java 에서 단위테스트를 위한 테스트 도구
Dependency(gradle):
testImplementation 'org.springframework.boot:spring-boot-starter-test'
SpringBoot 프로젝트를 생성하면 src 폴더 밑에 test 라는 폴더가 생성된다.
아래 test 폴더에 패키지를 만들고 단위테스트를 작성할 수 있다.
단위테스트 예시
회원을 관리하는 Repository와 비즈니스 로직을 수행하는 Service 코드를 작성했다.
MemberService의 join은 우선 이름 중복검사를 한 후에, map 에 member를 저장하는 기능을 제공한다.
여기서 MemberService의 Join 함수에 대해 단위테스트를 작성할 수 있다.
@Test 어노테이션을 통해 테스트를 진행할 수 있다.
spring 이라는 이름을 가진 멤버 객체를 생성하고
join을 한 후에 해당 이름을 가진 멤버가 존재하는지 테스트하는 코드이다.
memberService.join()을 실행한 후에
Junit 에 포함되어있는 Assertions 의 assertThat().isEqualTo() 함수를 통해 처음에 만든 멤버의 이름이 존재하는지 검사하는 테스트이다.
그외 isNotEqualTo, isBetween, instanceOf... 등으로 다양하게 결과값을 체크할 수 있다.
위 테스트를 실행하면 초록색과 함께 성공 표시가 나타난다.
Exception 단위테스트
위 MemberService 에서 Duplicate를 보면 Exception 을 던지는 구문이 있다.
Exception 테스트 예제는 다음과 같다.
Junit Assertions 에서 assertThrows를 제공하고 있으며
assertThrows( Exception.class, () -> 테스트할 함수); 로 예외를 가져올 수 있다.
예외를 가져온 후에 assertThat( e.getMessage()).isEqualTo() 로 에러 메세지의 검증 또한 할 수 있다.
assertj, assertThatThrownBy 로 하는 방법 ->
만약 Exception 을 커스텀해서 사용해서 특정 필드를 검사해야한다면,
로 검증할 수 있다.
그리고 테스트마다 초기화 작업이라던지
후속 조치가 필요할 때가 있다.
@BeforeEach : 각 테스트 전에 수행하는 코드
@Before: 테스트 전 수행
@AfterEach: 각 테스트 이후 수행되는 코드
@After... 등등
예시
위 테스트 에서는 Service 가 생성될 때 Repository를 주입시켜야 작동할 수 있다.
BeforeEach를 통해 Repositor를 주입하고 테스트를 수행하도록 작성했다.
현재 위 코드는 static 한 Map 에 회원정보를 담아두고있어서 하나의 테스트가 끝나면 Map 을 비워주어야 다음 테스트에 영향이 가지 않는다.
따라서 @AfterEach 를 통해 MemberMap 을 비워주도록 설정할 수 있다.
'Java > Spring' 카테고리의 다른 글
[SpringBoot] SpringBoot 에 RabbitMQ 연동하기 (0) | 2022.08.05 |
---|---|
[Spring] Spring Bean 등록과 의존관계 설정 (0) | 2022.06.20 |
[Spring Boot] 2. 스프링 웹 개발 기초 - Static, MVC패턴, API 방식 (0) | 2022.05.30 |
[SpringBoot] 1. Spring Boot 프로젝트 시작하기(생성, Controller, View, Build) (0) | 2022.05.27 |
[Spring Framework] 스프링의 이해/개념 (IoC, Bean, AOP, PSA) (0) | 2021.10.22 |