- JUnit은 자바 프로그래밍 언어 용 단위 테스트 프레임워크이다
- JUnit을 알기전까지는 Main 함수 안에 테스트용 코드를 작성하고 지우고 반복하였지만 이제는 그럴필요가 없다!
- 테스트 하고 싶은 클래스에 단축키 또는 우클릭으로 테스트를 생성할 수 있다.
- 생성을 하면 test 폴더에 테스트용 클래스가 생성된다
package com.sparta.springprepare.calculator; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; class CalculatorTest { @Test @DisplayName("더하기 테스트") void test1() { Calculator calculator = new Calculator(); Double result = calculator.operate(8, "+", 2); System.out.println("result = " + result); Assertions.assertEquals(10, result); } @Test @DisplayName("나누기 테스트") void test2() { Calculator calculator = new Calculator(); Double result = calculator.operate(8, "/", 2); System.out.println("result = " + result); Assertions.assertEquals(4, result); } }
- 생성된 테스트용 클래스 안에 수동으로 테스트 케이스를 넣어줘야된다는 점은, 이전에 Main함수에서 테스트 케이스를 넣는 방식과 크게 다르지 않다.
하지만 실행했을때 나오는 결과는 신세계였다!
- 그렇다! 마치 알고리즘 문제를 풀고 제출할때 나오는 화면과 굉장히 유사하다!
- 이를 통해 여러상황을 한번에 테스트 할 수 있고, 테스트에 대한 예상 결과값까지 지정할 수 있다!
Assertions.assertEquals(10, result);
- 이 코드를 통해서 예상 결과값을 지정할 수 있다. 만약 결과값이 지정한 값과 다르다면?
- 정말 알고리즘 문제를 제출할때 처럼 결과값이 다르다고 알려준다!
JUnit의 효능
- Main 함수에 테스트 코드를 작성하고 나중에 지워야하는 번거로움까지 없애주면서
- 여러가지의 테스트 케이스를 한눈에 볼 수 있다!
- Lombok은, 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드/생성자 등을 자동 생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리이다
- Lombok을 알기전까지는 생성자와 메서드들을 직접 입력하였는데 이제는 그럴 필요가 없다!
package com.sparta.springprepare; public class Memo { private String username; private String contents; }
- 여기 Memo라는 클래스가 있다. 필드에 username과 contents 변수가 있다. 평소라면 어떻게 생성자와 메서드를 만들었을까?
- 그렇다. 단축키를 이용하여 생성자, getter 및 setter를 만들었을 것이다.
(이 단축키 기능조차도 최근에 알았다. 알게되기 전까지는 수동으로 한땀한땀 입력했었다)package com.sparta.springprepare; public class Memo { private String username; private String contents; public Memo(String username, String contents) { this.username = username; this.contents = contents; } public String getUsername() { return username; } public String getContents() { return contents; } public void setUsername(String username) { this.username = username; } public void setContents(String contents) { this.contents = contents; } }
- 변수를 2개 갖고있는 클래스의 생성자와 getter, setter만 만들었을 뿐인데 이렇게나 길어졌다
- 일반적인 클래스는 필드에 있는 변수들이 훨씬 많기에 이를 줄여주는 Lombok을 사용해보자
- Lombok의 사용법은 간단하다. 그저 Annotation만 작성해주면 끝이다!
package com.sparta.springprepare; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @AllArgsConstructor @Getter @Setter public class Memo { private String username; private String contents; }
- 이렇게만 작성해주면 끝이다! 이 3줄의 Annotation으로 위의 코드와 동일한 기능을 한다.
- 위 코드에서 사용한 lombok annotation을 정리해보자면
- @AllArgsConstructor : 필드에 있는 모든 값을 파라미터로 받는 생성자를 생성
- @NoArgsConstructor : 파라미터가 없는 디폴트 생성자를 생성
- @RequiredArgsConstructor : final로 선언된 필드만을 파라미터로 받는 생성자를 생성
- @Getter : 필드에 있는 모든 값에대한 getter를 생성
- @Setter : 필드에 있는 모든 값에대한 setter를 생성
- 이렇게 lombok을 사용하게 되면 당장의 코드에는 생성자, getter, setter가 있지 않지만 build를 하게되면 생성되는 방식이다. 따라서 빌드전 코드를 다루는 입장에서 코드가 굉장히 간결해진다!
오늘은 Spring을 배우는데 있어서 도움이 될만한 편의기능을 많이 배운것 같다.
특히 JUnit은 지금도 충격이다.. 프로그래머스 처럼 테스트케이스를 넣을 수 있는것을 보고 이때까지 하나하나 테스트 하면서 개발해온 시간들을 부정당하는 기분이었다.
하지만 이젠 알게되었으니 이제부터라도 잘 활용하면 되는거 아닌가? 라는 생각이다.
그리고 오늘 IntelliJ의 플러그인도 여럿 설치했는데 그중에 가장 기억에 남는 것이 IntelliJ는 플러그인으로 로딩바도 바꿀수 있었다. 그래서 아주 귀염뽀짝한걸로 바꿨는데 아주 맘에든다.
사실 Spring의 초기부분도 배웠는데 JUnit 과 Lombok과 같이 정리하기에는 뭔가 거리가 멀기도 하고 분량도 너무 길것 같아서 내일부터 Spring에 대해서 정리해볼 예정이다! 아무래도 새로운것을 배우니 너무 재밌었다 :)