스프링 공부/인프런 김영한 스프링 핵심 원리 - 기본편 노트정리

2-5. 회원 도메인 실행과 테스트

모항 2022. 9. 1. 22:18

저번 시간까지 회원 정보 관리와 관련된 도메인, 리포지토리, 서비스를 간단하게 만들었다.

아직 주문과 할인에 관련된 코드는 짜지 않았다.

 

이번 회차에서는 저번 시간까지 짠 것이 잘 동작하는지 테스트를 해본다.

 

먼저 순수 자바 코드로 테스트를 해보고,

그 다음에는 테스트를 돕는 프레임워크인 JUnit과, JUnit을 사용한 테스트 코드를 더 편리하게 해주는 라이브러리인 AssertJ를 사용하여 테스트할 것이다.

 

 

 

 

순수 자바 코드로 테스트해보기

junit과 assertj를 사용하지 않고

그냥 main에 순수하게 자바 코드를 적어서 실제 프로그램을 돌려본다.

 

test가 아닌 main 폴더 내의 hello.core 안에 MemberApp 클래스를 만든다.

 

이 클래스에 main 메소드를 만들어주면 되는데

강사님께서 신기한 단축키 하나를 알려주셨다.

 

 

main 메소드는 java에서 굉장히 자주 사용하는데,

쓸 때마다 public static void main 어쩌고를 똑같이 적어주어야 한다는 것이 상당히 귀찮다.

이 점을 해결해주는 단축키가 바로, public static void main의 앞글자를 딴 psvm이다.

 

 

이렇게 psvm을 적고 엔터를 누르면

 

 

main이 알아서 생긴다.

 

 

이제 main의 내용을 채운다.

새 멤버를 넣고,

아이디를 기준으로 방금 넣은 그 멤버를 찾아온 다음,

넣었던 놈과 찾아온 놈의 이름을 콘솔에 직접 출력하여 둘이 동일한지 눈으로 직접 확인하는 테스트이다.

넣은 놈의 ID값을 기준으로 findById를 수행한 것이니 찾아온 놈의 이름이 넣은 놈과 같아야 테스트 통과이다.

 

 

돌려본다.

하단의 콘솔에 joined: memberA와 found: memberA가 잘 뜨는 것이 보인다.

넣은 회원과 찾아온 회원의 이름이 같으므로 회원가입 기능이 문제 없이 돌아간다는 것을 알 수 있다. 테스트 통과이다.

 

 

 

 

 

 

JUnit과 AssertJ 사용하기

위에서 해본 테스트로 회원가입과 회원정보 찾아오기 기능을 잘 테스트하기는 했다.

 

그러나 이런 방법은 좋은 방법이 아니다.

내가 확인하고 싶은 사항만 딱 골라 그것에 잘 돌아가냐 아니냐의 결과를 받아오는 게 아니라,

출력문이라는 간접적인 방법을 이용하여 확인하는 방식이기 때문이다.

 

또한, 테스트가 실패해서 문제를 해결해야 하는 상황이 왔을 때 굉장히 번거롭다.

출력문에 뜬 이름의 값이 서로 다르기만 하면 다행인데

오타 등의 이유로 다른 오류가 뜰 수도 있다.

그럼 오류의 종류에 따라 그때그때 다르게 상황을 파악하고 대처해야 한다.

 

그러므로!

저번 입문 강의 때 해보았듯이

기면 기다 아니면 아니다

성공이다 실패다 Yes or No로 알려주는

JUnit과 AssertJ를 사용하는 것이 훨씬 낫다.

 

 

이번엔 main이 아닌 test 폴더에 만든다.

먼저 hello.core 안에 member 패키지를 만들고 그 안에 MemberServiceTest 클래스를 만든다.

 

 

그 다음 이렇게 준비작업을 해준다.

회원가입 기능이 잘 작동하는지 볼 것이므로 join() 이라는 메소드를 만들어주고,

JUnit에서 제공하는 어노테이션인 @Test를 붙여주고,

강사님이 알려주신 꿀팁대로 //given, //when, //then 틀을 잡아준다.

 

테스트 코드를 작성하기 전에 //given, //when, //then 틀을 잡는 것은 저번 강의 때부터 계속 알려주시는 팁인데

//given: 이것이 주어졌을 때 (테스트에 사용할 객체들을 선언)

//when: 이런 일이 일어나면 (테스트의 대상인 동작을 수행)

//then: 이런 결과가 나온다 (검증(assert) 코드를 작성)

이런 내용의 틀이다.

대부분의 테스트가 이 틀에 대충 들어맞기 때문에 이 틀을 사용하면 코드 작성이 빠르고 편해진다.

 

 

이제 내용을 채워준다.

나는 이렇게 채워주었다.

//then에 있는 검증 문장은

실제(actual) 결과 값인 out 이

기대값(expected)인 in 과 동일한지를 체크하는 문장이다.

 

 

돌려본다.

초록불이 잘 들어왔다. 테스트 통과이다.

만약 두 값이 다르거나 다른 문제가 있다면 초록불이 들어오지 않는다.