본문 바로가기
공부/javascript

스프링부트: Junit을 이용해 테스트 하기

by 샤샤샤샤 2023. 1. 27.

Test란?

개인이 간단하게 어떤 서비스를 구현한다고 하면 코드는 길어봐야 수천줄 정도 나오겠지만, 회사의 서비스는 만줄은 우습게 넘어갈 정도로 방대한 양의 코드가 동작한다. 헌데 긴 코드에 무턱대고 새로운 코드를 끼워넣으면, 그 코드가 어떻게 작동하는지 확인하기 위해 재실행하는데 리소스가 많이 들 뿐만 아니라, 오류가 발생할 경우 원인이 무엇인지 찾기도 어려워진다. 이런 일을 방지하기 위해 프로그램을 작은 단위로 쪼개서 옳바르게 동작하는지 미리 확인하는 것이 바로 Test다.

과거에는 개발자들이 직접 테스트 환경을 만들어야 했으나, 테스트를 필요로하는 개발자들이 늘어남에 따라 스프링부트에서는 테스트 환경이 내장되어 있기에 따로 할일은 없다.

 

방법(인텔리제이에서 만드는 방법)

1. 테스트하고 싶은 클래스에서 우클릭 -> 생성 ->테스트를 클릭한다.

2. 해당 클래스 안의 메서드 중, 테스트하고 싶은 메서드를 선택한다.

3. 만들어진 테스트 파일의 메소드에 테스트해보고 싶은 코드를 작성한다.

    테스트 역시 의존성을 지원하기 때문에 정상적인 코드가 이상하게 작동하지는 않을지 걱정하지 않아도 된다.

@Test는 테스트 메소드라는 뜻으로, 테스트로 지정된 메서드들은 왼쪽의 실행 아이콘을 통해 개별적으로 실행 가능하다.

4. 만약 서버가 구동되는 상태에서 시험해보고 싶다면 서버 구동 파일도 테스트 클래스를 만들어주자. 이때 어떤 메소드도 선택하지 않아도 된다. 이후, 시험해보고 싶은 메소드가 있는 테스트 클래스가 서버의 테스트 클래스를 상속받도록 한 다음, 메소드를 실행시키면 서버가 구동된 이후 메소드가 실행되고, 이후 다시 서버가 종료된다.

@DisplayName("이름")은 테스트한 메소드의 이름을 정해준다.

만약 이름이 뜨지 않고 성공이라고만 뜬다면 이는 오류가 아니라 인텔리제이 설정상의 문제이다. 코드를 gradle에서 실행할지, 인텔리제이에서 실행할지 정할수 있는데, gradle이 기본값으로 설정되어 있다. 더 빠르기 때문이다. 만약 DisplayName의 값을 인텔리제이 출력창에서 보고 싶다면 설정에서 이를 변경해주자.

테스트는 딱히 더 설명할 것이 없다. 만약 테스트만을 위한 어노테이션이 존재하거나 따로 환경설정을 해줘야 한다면, 실제 코드와 차이가 발생하게 되고, 그러면 테스트 하는 의미가 없어지기 때문이다.

 

그러나 간단하다는 말이 중요도가 낮다는 말과 일맥상통하는 것은 아니다. 자동차 공장으로 예를 들어보자면, 테스트는 조립전 최소한의 부품 검수다. 부품들을 검수하지 않고 자동차를 만들었는데 불량이 발생했다고 가정해보자. 원인이 엔진일지, 바퀴일지, 아니면 별것 아닌 너트가 덜조여진것인지 어떻게 판단할수 있겠는가? 프로그램도 마찬가지다. 어디서 오류가 발생하는 것인지 빠르게 파악하기 위해, 그리고 예상치 못한 오류가 발생하는지 확인하기 위해 테스트 과정을 거치는 것이다. 특히 서비스하고 있는 코드에 테스트 과정 없이 새로운 코드를 끼워넣는 것은, 처음 만든 자동차를 시운전도 안하고 파는것이나 다름없다. 사고가 발생하면 이미 늦은것이다.

 

다시말하지만 개인적으로 자그맣게 개발할때 테스트는 굳이 안해도 된다. 하지만 회사에서 코드를 짠다면, 반드시 테스트 과정을 거치자.

'공부 > javascript' 카테고리의 다른 글

32일차 복습  (0) 2022.12.28
32일차 복습  (0) 2022.12.27
프로퍼티(property)  (0) 2022.12.27
31일차 복습-2  (0) 2022.12.26
31일차 복습 - 1  (0) 2022.12.26