개발자 공부 - 인프런 온라인 강의/스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[섹션 3. 회원 관리 예제 - 백엔드 개발] 회원 리포지토리 테스트 케이스 작성 (+ Intellij 자동완성 단축키, 변수 자동입력 단축키, Static Import, 변수명 변경 단축키) / 인프런 김영한 스프링 입문

easpop 2023. 1. 28. 09:00
728x90
반응형

 

 

 

 

 

이번 강의에서는 테스트 케이스를 작성했다

테스트 케이스를 진행하기 위해서 JUnit이라는 프레임 워크를 사용해서 진행했음.

 

전에 학원에서 프로젝트를 할 때는, 구현이 잘 되었는지 테스트를 하기 위해서는,

이클립스에서 자바 main 메소드를 통해서 실행하고 콘솔에다 println으로 직접 찍어보면서 테스트를 했었는데,

 

이렇게 하게 되면 단점이, 준비 및 실행하는데 시간이 오래 걸리고, 반복하기 어렵다는 단점이 있다고 한다.

또한 여러 테스트를 한번에 실행하기 어렵다는 단점도 있음.

그렇기 때문에 자바는 JUnit이라는 프레임워크를 사용해서 테스트 코드를 만들어서,

테스트 코드를 실행해서 이러한 문제들을 해결하면서 테스트를 한다고 한다~~!

 

막간 인텔리제이 자동 입력 혹은 완성 단축키 꿀팁!

가끔 인스턴스 생성할 때

이런식으로 자동 완성이 뜨는데

이걸 클릭하면 이런식으로 세미콜론(;) 없이 됨

그럴 때 커서를 문장 끝으로 옮긴 다음에 ;를 입력하지 않아도

ctrl + shift + enter 단축키를 쓰면 세미콜론 자동입력ㅋㅋㅋㅋ 이거 굉장히 편함

 

이게 여기 뿐만 아니라 클래스를 만들때도 예를 들어, public void save() 이것까지만 치고 단축키를 쓰면

뒤에 {} 이것도 자동으로 입력됨!

즉, 그러니까 마지막에 뭐 나올지 정해져 있을때 쓰면 편하다ㅋㅋㅋㅋ

 

 

 

 

 

 

- 테스트 케이스 작성

result랑 member랑 똑같은지 테스트를 위해 Assertions.assertEquals 함수를 써서 테스트

 

기대한 값과 실제값이 다르면 위와 같은 사진의 에러가 뜬다.

 

- 테스트 실행하는 법

테스트 코드를 위와 같이 작성을 하고 나면

해당 메소드 실행이 가능하다

 

 

 

 

 

 

- Static Import 하는 법

커서를 위와 같이 두고 alt + enter 하면

static import가 가능한 창이 뜨고 static import 추가~~

static import가 되면 on-demand 상태, 즉 언제든지 호출할 수 있는 상태가 된다~~

static import 이후에는 바로 AssertThat을 쳐서 메소드 호출이 가능하다.

반응형

- 변수 리네임 하는 법

테스트 케이스 하나 만들고 줄 복사를 위해서 드래그하고 Ctrl + D하면

같은 이름의 변수가 복사되는데 그럴때~~

Shift + F6을 눌러서 하나만 바꾸면

위에 사진의 드래그 된 부분이 한번에 동시에 리네임 가능!

 

 

 

 

 

 

 

JUnit을 이용해서 테스트를 하게 되면 장점이 여러개의 클래스를 동시에 테스트가 가능하다는 점!

화면 좌측 하단에 보면 여러개의 메소드를 확인할 수 있는것처럼 클래스도 역시 여러개 있을 때 동시에 테스트가 가능하다.

 

- 변수 자동 입력 단축키

강사님이 영상에서 소개를 안해주셔서 찾아보니

Ctrl + Alt + V를 누르면 입력한 코드를 객체화 할 수 있는 변수가 자동으로 작성됨~~! 이건 엄청 편한 듯ㅋㅋㅋ

위에 사진 처럼 repository.findAll(); 치고 단축키를 입력하면 왼쪽처럼 자동으로 입력 됨!

 

- 테스트 동시에 할 때 주의해야할 점

여러 메소드 혹은 클래스를 동시에 테스트 하게 되면 주의해야 할 점이 있다.

동시에 돌리다보면 개별적으로는 통과했지만, 위의 사진처럼 오류가 뜨는 경우가 있는데,

어느 메소드가 다른 메소드에 영향을 끼쳤기 때문!

 

메소드 실행 순서는 보장이 안되며, 모든 테스트는 메소드 별로 다 따로 동작하기 때문에,

메소드 설계를 할 때는 순서에 의존하지 않는, 순서에 상관없이 설계를 해줘야 한다

그렇게 의존관계가 없이 설계 되기 위해선, 하나의 테스트가 끝날때마다 저장소나 공용 데이터를 삭제해줘야됨!

 

테스트가 끝나고 나면 데이터를 클리어를 해줘야 하는데

 

테스트가 끝날 때 마다, 리포지토리를 지워주는 코드를 넣어야 됨.

리포지토리에 클리어해주는 메소드를 추가해주고,

메소드 실행이 끝날 때 마다, 지정된 동작을 하는 메소드 AfterEach 메소드를 테스트 클래스에 만들어준다.

콜백 메소드라고도 하며, 메소드가 끝날때마다 호출이 됨.

 

스토어를 비워주는 clearStore 메소드를 생성이 되면,

테스트가 실행이 되고 끝날때마다, 한번씩 저장소를 다 지워줌!

 

추가로 테스트 주도 개발(TDD)를 소개해주셨는데,

역으로 테스트 클래스를 먼저 작성하고 레포지토리를 작성하는 순으로 가는것도 할 수 있음.

어떤 것을 만들어야 되는데 검증하는 틀을 먼저 만드는 것!

세모 모양 작품을 만들어야 된다고 쳤을 때, 세모 틀을 먼저 만드는 기법.

테스트 만들고 구현 클래스를 만들어서 구현해 보는 것이라고 한다.

 

 

 

 

 

 

- 테스트 전체 코드

 

 

728x90
반응형