YoungSoo

스프링 입문 - 회원 리포지토리 테스트 케이스 작성 본문

BE/Spring

스프링 입문 - 회원 리포지토리 테스트 케이스 작성

YoungSooSoo 2022. 7. 7. 00:19

개발한 기능을 실행해서 테스트할 때 자바의 main 메서드를 통해서 실행하거나, 웹 애플리케이션의 컨트롤러를

통해서 해당 기능을 실행한다. 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러

테스트를 한번에 실행하기 어렵다는 단점이 있다. 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한

문제를 해결한다.

 

JUnit을 이용해 테스트를 한다.

Test에서 repository라는 패키지를 새롭게 만들어주고 그 안에 테스트할 클래스에 Test를 붙여 만들어주는 것이

관례라고 한다.

Test Save

먼저 save를 테스트를 하는데 @Test라는 어노테이션을 달아준다.

member 객체를 만들어 spring이라는 이름을 저장해주고 result에서 값을 꺼내와 두 값이 같은지 비교하도록 했고 그 결과 아무 이상 없이 실행되는 것을 확인할 수 있다.

Assertions를 사용하여 결과가 같은지 확인하는 것이다. Ctrl + P를 이용해 옵션을 확인했는데 앞에는 expected 뒤에는 actual을 적어줘야 한다. 즉 실제 값은 result이다.

다른 값 넣기

값이 같은지 확인이 제대로 되는지 확인하기 위해 null을 넣어 오류가 나는 것을 확인할 수 있다.

간편한 사용

위에 썼던 방식과 유사하지만 좀 더 간단하게 줄여서 쓰기 위해 Alt + Enter를 사용해 

import static org.assertj.core.api.Assertions.*;

 위 문장을 추가해준다면 assrtThat를 바로 사용할 수 있다.

단축키

Shift + F6을 통해 같은 코드 모두 고칠 수 있다.

Test findByName

사용자 두 명을 넣어준 뒤 테스트를 진행해주었고 성공한 화면을 확인했다.

 

findAll

두 명의 사용자를 만들어준 뒤 result에 결과를 저장했고 두 명의 사용자가 나오는 것을 밑에 사진에서 확인할 수

있다.

오류

전체 테스트를 진행하였는데 findByName에서 오류가 나는 것을 확인할 수 있다.

에러가 나는 이유는 findAll이 먼저 테스트 되었고 repository에 spring1, spring2가 저장되어있어 오류가 나는 것이다. 

MemoryMemberRepository 추가

오류 해결

오류를 해결해주기 위해 clearStore라는 메소드를 만들어 repository를 초기화해주는 기능을 만들었고

테스트가 끝날 때마다 저장된 데이터를 초기화 해주는 코드를 추가해주어야 한다.

한 번에 여러 테스트를 실행하면 메모리 DB에 직전 테스트의 결과가 남을 수 있다.

이렇게 되면 다음 이전 테스트 때문에 다음 테스트가 실패할 가능성이 있고 @AfterEach를 사용하면 각 테스트가 종료될 때마다 이 기능을 실행한다. 여기서는 메모리 DB에 저장된 데이터를 삭제한다.

테스트는 각각 독립적으로 실행되어야 한다. 테스트 순서에 의존관계가 있는 것은 좋은 테스트가 아니다.

 

테스트는 서로 간에 순서 의존관계없이 설계되어야 하고 그렇기에 테스트가 끝날 때마다,

저장된 데이터들을 초기화해줘야한다.

이번 예제에서는 먼저 repository를 개발한 다음에 테스트 케이스를 작성했다.

 

하지만 반대로 테스트 케이스를 먼저 작성한 뒤 repository를 개발할 수도 있다.

이런 방식을 TDD(테스트 주도 개발)이라고 한다.

 

해당 글은 김영한 님의 인프런 강의를 보고 정리한 글 입니다.

출저 - https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com