공부/whiteship-java

4주차 과제: JUnit5

chulphan 2020. 12. 11. 13:03

이전 포스트에 이어서 부가적인 과제를 수행해보려고 한다.

 

특히 테스트 코드를 작성하는 것에는 관심이 많고 시도를 해봤으나 성공적으로 완료한 적은 없다..(OTL)

 

github.com/whiteship/live-study/issues/4

 

4주차 과제: 제어문 · Issue #4 · whiteship/live-study

목표 자바가 제공하는 제어문을 학습하세요. 학습할 것 (필수) 선택문 반복문 과제 (옵션) 과제 0. JUnit 5 학습하세요. 인텔리J, 이클립스, VS Code에서 JUnit 5로 테스트 코드 작성하는 방법에 익숙해

github.com

 

과제 설명

■ JUnit5 란??

먼저 JUnit은 JVM 상에서 개발자 측면에서 테스트를 할 수 있는 테스팅 프레임워크.

Java8 이상이면 사용 가능하며 다양한 스타일의 테스팅 스타일을 제공 함.

 

특히 JUnit5는 JUnit Platform, JUnit Jupiter, JUnit Vintage 라는 3개의 부분 프로젝트(sub-projects) 들을 결합한거라고 한다.

 

저 3개의 프로젝트가 뭔지 잘 모르겠어서 간단히 알아보았다.

 

  • JUnit Platform: JVM 상에서 테스팅 프레임워크를 실행시키기 위한 기반을 제공
  • JUnit Jupiter: 새로운 프로그래밍 모델과 JUnit5 에서 테스트를 작성하는 것과 확장(extension)에 대한 확장 모델의 조합이다.
  • JUnit Vintage: JUnit3과 JUnit4 를 실행하기 위한 TestEngine 을 제공한다.

(이전 버전들도 비슷하게 구성되어있지 않았을까...??)

 

한 가지 신기한 점은 테스트 케이스를 작성 할 때에 운영체제나 JVM 런타임 버전, 환경변수에 대한 조건부 테스트를 어노테이션을 추가해서 비교적 쉽게 테스트 할 수 있는 것으로 보인다.

 

 

▶ 테스트코드 작성해보기

나는 JUnit 공식 사이트에서 제공하는 메이븐 기반의 예제 프로젝트를 보면서 따라 작성해보고, 그 뒤에 부가적인 기능을 추가하면서 테스트 코드를 작성해보려고 한다.

이외에 Gradle, Ant 기반의 예제 프로젝트도 제공하고 있으므로 https://junit.org/junit5/docs/current/user-guide 에서 찾을 수 있으니

각각에 맞춰서 참고하면 좋을 것 같다.

 

 

1. maven 프로젝트를 생성 후, pom.xml 에 다음과 같은 의존성을 추가한다

pom.xml

 

2. 그리고 잘 설정되었는지 테스트를 한 번 돌려본다

테스트가 성공적으로 됐으니 이제 예제 프로젝트를 보고 쭉 따라해보자

 

▶ 계산기 예제

JUnit 공식 사이트에서 제공하는 예제는 계산기이다.

테스트 케이스는 두 수를 단순히 더하는 것과 csv 소스를 통해 더하는 것 두 가지 밖에 없다.

여기서 뺄셈, 곱셈, 나눗셈을 작성해보고 약간이나마 익숙해져 보자.

 

뺄셈
2 - 4 = -2 라는 테스트를 먼저 CalculatorTest.java (src/test/java) 에 작성한다

CalculatorTest.java

그리고 Calculator.java (src/main/java) 에 substract 메소드를 작성한다

Calculator.java

 

그리고 이제 테스트를 돌려본다.

 

테스트 실행 결과

테스트가 성공적으로 수행 된 것을 볼 수 있다.

 

위와 같은 과정을 거쳐서 곱셈과 나눗셈에 대한 테스트 코드와 실제 코드를 작성할 수 있을 것 같다.

 

하지만 나눗셈은 다음 기회로 미루고 곱셈만 작성하는 걸로..

 

⊙ 곱셈

 

곱셈에 대한 테스트 코드를 작성하자

multiply test

그 다음에는 실제 코드를 작성하고...

실제 코드

테스트를 돌려보면..?

테스트 실행 결과

마찬가지로 성공적으로 실행된다.

 

다음으로 예제에서 사용한 어노테이션과 메소드에 대해 알아보도록 하자

 

◈ 예제에서 사용한 어노테이션 & 메소드

  • Test 어노테이션
    'public void' 메소드에 @Test 를 붙이면 JUnit 은 이 메소드를 테스트 케이스로 인식한다
    private 메소드나 static 을 붙이면 안되고 또 값을 반환해서는 안된다.
  • DisplayName 어노테이션
    테스트 클래스 또는 테스트 메소드에 대해서 사용자 지정 표시 내용을 지정할 때 사용한다
    이 것을 명시하면 우리가 지정한 텍스트가 테스트 결과에 표시되므로 무슨 내용에 대해 테스트 했는지 더 명확히 알 수 있을 것이다
  • assertEqual 메소드
    우리가 기대하는 값과 실제로 실행된 결과를 비교하는 역할을 한다.
    첫 번째 인자로 기대하는 값, 두 번째 인자로 실제 값을 전달하며 부가적으로 세 번째 인자로 사용자 지정 텍스트를 넘길 수 있다

    ※ JUnit 에서는 테스트에 필요한 다양한 어노테이션과 메소드들을 제공한다. 보다 자세한 내용들은 

          https://junit.org 에서 확인할 수 있다!!

 

 

¿ 그런데.. 백기선님께선 왜 JUnit 을 공부하라고 과제로 내주셨을까??

 => 그래서 구글에 우리는 왜 테스트 코드를 작성해야 하는지에 대해서 찾아보았다.

  • 디버깅에 소요되는 시간을 줄여준다
  • 우리가 실제 코드를 작성하기 전에 우리의 코드에 대해서 생각하게 해준다
  • 처음 코드를 작성할 때 효율적으로 작성할 수 있게 해준다
  • 테스트 코드가 우리 코드의 문서가 되어 준다
  • 개발을 원할하게 할 수 있도록 유지해준다
  • 그리고... 테스트 코드 작성이 그만큼 중요하니까 인프런 강좌로도 내셨을 것이다 (내 주관적인 생각)

 

∴ 느낀점

이번 포스트에서는 JUnit 에 대해 알아보고 코드 작성과 테스트 코드 작성 이유에 대해 알아보았다.

 

앞으로는 토이 프로젝트든지 어떤 프로젝트를 해도 테스트 코드를 작성하는 버릇을 들여야하겠다고 생각하게 됐다.

지금은 비록 JUnit 을 맛만 보았지만 앞으로 익숙해질 수 있도록 노력해야겠다.

 

[¡ 백기선님 자바 테스트 강좌] www.inflearn.com/course/the-java-application-test?inst=86d1fbb8

 

더 자바, 애플리케이션을 테스트하는 다양한 방법 - 인프런

자바 프로그래밍 언어를 사용하고 있거나 공부하고 있는 학생 또는 개발자라면 반드시 알아야 하는 애플리케이션을 테스트하는 다양한 방법을 학습합니다. 초급 프로그래밍 언어 프레임워크

www.inflearn.com

 

[이 포스트를 쓰기 위해 참고했던 사이트]

https://junit.org 

 

JUnit 5

Société Générale Use, Contribute and Attract: learn about Société Générale's open source strategy.

junit.org

www.educative.io/edpresso/5-reasons-why-testing-code-is-great

 

5 reasons why testing code is great

5 reasons why testing code is great

www.educative.io

 

'공부 > whiteship-java' 카테고리의 다른 글

7주차: 패키지  (0) 2021.01.01
6주차: 상속  (0) 2020.12.24
5주차: 클래스  (0) 2020.12.19
4주차 과제: live-study 대시보드  (0) 2020.12.12
4주차: 조건문, 반복문  (0) 2020.12.10