인프런 스프링-8

Cloudman·2022년 11월 27일
0

항해99 스프링 공부

목록 보기
10/15

회원 관리 예제



진행 과정

  1. 비즈니스 요구사항 정리
  2. 회원 도메인과 리포지토리 만들기
  3. 회원 리포지토리 테스트 케이스 작성
  4. 회원 서비스 개발
  5. 회원 서비스 테스트


3) 테스트 케이스 작성

개발한 기능을 이제 테스트를 해야 한다.
지금까지 main 메서드를 이용했고 그 외에는 웹 애플리케이션의 컨트롤러를 통해 실행을 할 수도 있다.
하지만 이런 방법은 실행에 오래 걸리고 반복 실행도 어려운 등 단점이 크다.
그래서 자바 Junit 이라는 프레임 워크로 테스트를 실행해서 위같은 문제를 해결할 수 있다,


회원 리포지토리 메모리 구현체 테스트

위의 사진처럼 test 폴더의 가장 마지막에 repository 패키지를 만들어 주고 이후 새롭게 자바 파일을 만들어 준다.

위처럼 진행해 주고 실행을 해보면 아래의 결과를 얻을 수 있다.

위 처럼 만약 값이 일치하고 존재한다면 출력되는 것은 없지만 녹색으로 성공한 것을 볼 수 있다.

만약 null 이여서 실패가 뜨면 Expected 에는 기대했던 값 현재의 값 Actual 이라고 뜨면서 에러가 발생한다.


위에서 사용한 Assertions 함수에는 두가지 종류가 있는데 처음에 사용한 것은 junit 으로 테스트를 해 보았다.

다만 이제부터는 assertj 의 것으로 진행을 할것이다.(왜냐면 강사님이 이게 쓰기가 더 편하다고 하셨으니까...?)



위의 모양이 되는데 가독성에 있어서 더 보기가 편한 것을 볼 수 있다.

그리고 저기서 더욱 간결하게 사용할 수도 있는데 Alt + Enter 를 해서 static 을 추가해 주면...

시작점에 위 같이 새롭게 import 된 것을 볼 수 있다.

저렇게 해주면 이제 코드를 쓸 때 앞에다가 Assertions 조차도 붙이지 않고 아래와 같이 사용이 가능하다.

위 같은 형태만으로도 사용이 가능해진다.




이번에는 이름을 찾는 기능을 테스트 해보자.

위처럼 입력하고 실행해 보면은

잘 작동한 것을 볼 수 있다.

위처럼 찾는 값은 spring2 인데 검증에서는 member1 즉, spring1 이여서 일치하지 않으면

위처럼 에러를 띄우는 것을 볼 수 있다.

그리고 클래스 단에서 한번에 돌릴 수도 있는데 이렇게 하면 아래의 Test 메소드가 전부 실행되서 아래와 같은 결과를 볼 수 있다.

결과에서 Test 메서드 2개가 모두 돌아간 것을 볼 수 있다.




이번에는 모든 값을 다 찾아 보자

내가 입력한 것은 2개 밖에 없는데 3개를 찾을 경우 저렇게 에러를 띄운다.

isEqualsTo 의 뒤에 오는 값을 이렇게 쓰일수도 있다는 것 정도로 알고 넘어가자.

이번에는 원래 값에 맞게 2 로 변경해주고 전체를 돌려보자 그러면...


이전에는 잘 돌았었는데 갑자기 findByName() 에서 에러가 발생했다.

옆의 순서를 잘 보면 findAll() 이 제일 먼저 시작한 것을 볼 수 있다.

즉, 순서의 경우에는 프로그램에서 알아서 잡아 준다고 보면 된다.
그렇기 때문에 순서에 의존적으로 해서 설계를 하면 안된다.

위 순서를 보면 findAll() 에서 이미 객체를 저장을 했다.
spring1spring2 이 여기서 저장이 되었는데

findByName() 에서 있는데 또 저장을 하려고 했기 때문에 에러가 발생한 것이다.

그래서 이 같은 현상을 방지하기 위해서는 한번 깔끔하게 클리어를 해 줘야 한다.

즉, 테스트가 끝날 때 마다 repository 를 지워주는 코드를 넣어줘야 한다.

Test 자바 파일에서 상단부에 아래와 같은 코드를 만들어 준다.

MemoryMemberRepository 레포지토리 맨 아래에는 아래의 메소드를 만들어 준다.

이제 실행하면 정상적으로 잘 되는것을 볼 수 있다.





지금은 개발을 끝내고 난 후에 테스트를 만들어서 진행하게 되었지만 이를 오히려 미리 테스트 케이스를 만들고 개발을 하는경우가 있는데 이를 TDD 테스트 주도적 개발 이라고 한다.

실제 개발 환경에서는 이러한 방식으로 많이 하는 듯 하다...

profile
코린이

0개의 댓글