회원 관리 예제 - 회원 리포지토리 테스트케이스 작성

2022. 7. 27. 13:382022/Spring

개발한 기능을 실행해서 테스트할 때, 자바의 main 메서드를 통해서 실행하거나 웹 애플리케이션의 컨트롤러를 통해 해당 기능을 실행한다. 그러나 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행이 어려우며, 여러 테스트를 한번에 하기 어렵다는 단점이 있다. 그래서 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다.

 

아래의 예제는 save 메소드가 잘 작동하고 있는지를 테스트 해보고 있다.

1. 도메인인 member 객체를 만들고, 사용자로부터 이름을 입력받는다.

2. 저장소에 저장하여, findById로 멤버의 아이디값과 동일한 저장소(repository)의 회원 id를 찾는다.

3. 저장소에 저장된 id가 실제 회원에게 생성된 id와 동일한지 확인해본다.

다음과 같이 초록색 체크 표시가 되면, 성공적으로 save가 동작했다는 것을 의미
만약 제대로 save가 동작하지 않는다면 다음과 같은 표시가 나타남

 

이어서 findByName과 findAll 메소드가 제대로 작동하는지 테스트 해보았다.

 

이번에는 전체 테스트를 돌려 보았다. 그런데 아래와 같이 멀쩡하게 findByName에서 테스트를 성공적으로 끝냈던 부분이 테스트 실패를 한 것이다. 

테스트를 진행하면 작성한 순서가 아닌 시스템 상에서 임의대로 테스트를 진행하게 되는데, 이때 findAll을 먼저 진행하면서 저장소에 만들어진 member1과 member2 객체로 인해 findByName에서 찾고자 한  member1객체와 실제 member1객체가 달라져서 생긴 일이다.  하지만 순서에 의존하도록 설계하면 안된다.

 

따라서 테스트가 끝나면 데이터를 깔끔하게 클리어해 주어야한다. 그렇게 되었을때 테스트 순서에 관계 없이 독립적으로 성공적인 테스트를 진행할 수 있게 된다. 

 

저장소를 클리어해주는 코드는 아래와 같다.

MemoryMemberRepository.java
MemoryMemberRepositoryTest.java

해당 코드를 추가해주면 각 테스트를 끝날 때 마다 저장소를 클리어하고, 테스트를 진행하게 된다.