개발/Java

JUnit 5 기초 학습과 Stack, 큐 구현 및 테스트

Debin 2022. 5. 18.
반응형

백기선님이 과거에 진행했던 Java 스터디 4주차 스터디 입니다.

JUnit5이란

  • 자바 개발자가 가장 많이 사용하는 테스팅 프레임워크가 JUnit이다.
  • 단위 테스트를 작성하는 자바 개발자 93% JUnit을 사용한다.
  • JUnit5의 구조는 아래와 같다.

 

JUnit5의 구조

  • Platform:  테스트를 실행해주는 런처(ide가 JUnit Platform을 지원한다) 제공. TestEngine API 제공.
  • Jupiter: TestEngine API 구현체로 JUnit 5를 제공. 우리는 Jupiter을 사용해 테스트를 진행한다.
  • Vintage: JUnit 4와 3을 지원하는 TestEngine 구현체.

JUnit5 시작

본인은 gradle 프로젝트에서 진행했으므로 build.gradle 파일에 아래와 같은 의존성을 추가한다.

본인은 스프링 프로젝트를 하나 생성했으므로 아래와 같은 의존성이 이미 작성되어 있었다.

build.gradle 파일에 추가

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

기본 애노테이션은 아래와 같다.

  • @Test : 테스트를 실행할 메소드를 지정한다.
  • @BeforeAll : 모든 테스트가 시작하기 전에 반드시 한 번 실행하는 메소드를 지정한다.
  • @AfterAll : 모든 테스트가 끝나고 반드시 한 번 실행하는 메소드를 지정한다.
  • @BeforeEach : 각각의 테스트를 실행하기 이전에 한 번 실행하는 메소드를 지정한다.
  • @AfterEach : 각각의 테스트를 실행하고 이후에 한 번 실행하는 메소드를 지정한다.
  • @Disabled : 실행하고 싶지 않은 테스트를 지정하는 애노테이션이다.
  • 참고 : JUnit5은 JUnit4처럼 테스트 메소드에 public 접근 제어자 제약이 없다. 

 

다음은 테스트 이름을 표기하는 대표적 애노테이션 2가지다.

  • @DisplayNameGeneration
    • Method와 Class 레퍼런스를 사용해서 테스트 이름을 표기하는 방법을 설정한다.
    • 기본 구현체로 ReplaceUnderscores 제공한다
  • @DisplayName (이것을 많이 사용한다.)
    • 어떤 테스트인지 테스트 이름을 보다 쉽게 표현할 수 있는 방법을 제공하는 애노테이션이다.
    • @DisplayNameGeneration 보다 우선 순위가 높다.

 

이제 제일 중요하다고 볼 수 있는 Assertions 부분이다.

보통 org.junit.jupiter.api.Assertions 을 static하게 import해 사용한다.

import static org.junit.jupiter.api.Assertions.*;
  • assert 메소드들은 보통 기대하는 값, 후자는 실제 나오는 값이다.
  • 마지막 매개변수로 Supplier<String> 타입의 인스턴스를 람다 형태로 제공할 수 있다.
  • AssertJ, Hemcrest 등의 라이브러리도 사용할 수 있다.
실제 값이 기대한 값과 같은지 확인 assertEquals(expected, actual)
값이 null이 아닌지 확인 assertNotNull(actual)
다음 조건이 참(true)인지 확인 assertTrue(boolean)
모든 확인 구문 확인 assertAll(executables...)
예외 발생 확인 assertThrows(expectedType, executable)
특정 시간 안에 실행이 완료되는지 확인 assertTimeout(duration, excutable)

Queue와 Stack 구현 과제

전반적으로 사용할 ListNode 코드 링크 

https://github.com/happysubin/JAVA-practice/blob/master/src/main/java/happysubin/javapractice/javastudy/week4/listnode/ListNode.java

 

ListNode를 사용해 구현한 LinkedList 코드 링크

https://github.com/happysubin/JAVA-practice/blob/master/src/main/java/happysubin/javapractice/javastudy/week4/listnode/ListNodeLinkedList.java

 

ListNode를 사용해 구현한 LinkedList 테스트 코드 링크

https://github.com/happysubin/JAVA-practice/blob/master/src/test/java/happysubin/javapractice/javastudy/week4/listnode/ListNodeLinkedListTest.java

 

배열을 사용해 구현한 Stack 코드 링크

https://github.com/happysubin/JAVA-practice/blob/master/src/main/java/happysubin/javapractice/javastudy/week4/stack/StackByArray.java

 

배열을 사용해 구현한 Stack 테스트 코드 링크

https://github.com/happysubin/JAVA-practice/blob/master/src/test/java/happysubin/javapractice/javastudy/week4/stack/StackByArrayTest.java

 

ListNode를 사용해 구현한 Stack 코드 링크 

버전 1: https://github.com/happysubin/JAVA-practice/blob/master/src/main/java/happysubin/javapractice/javastudy/week4/stack/StackByListNode.java

버전 2: https://github.com/happysubin/JAVA-practice/blob/master/src/main/java/happysubin/javapractice/javastudy/week4/stack/StackByListNodeV2.java

 

ListNode를 사용해 구현한 Stack 테스트 코드 링크

https://github.com/happysubin/JAVA-practice/blob/master/src/test/java/happysubin/javapractice/javastudy/week4/stack/StackByListNodeTest.java

 

배열을 사용해 구현한 Queue 코드 링크

https://github.com/happysubin/JAVA-practice/blob/master/src/main/java/happysubin/javapractice/javastudy/week4/queue/QueueByArray.java

 

배열을 사용해 구현한 Queue 테스트 코드 링크

https://github.com/happysubin/JAVA-practice/blob/master/src/test/java/happysubin/javapractice/javastudy/week4/queue/QueueByArrayTest.java

 

ListNode를 사용해 구현한 Queue 코드 링크

https://github.com/happysubin/JAVA-practice/blob/master/src/test/java/happysubin/javapractice/javastudy/week4/queue/QueueByListNodeTest.java

 

ListNode를 사용해 구현한 Queue 테스트 코드 링크

https://github.com/happysubin/JAVA-practice/blob/master/src/main/java/happysubin/javapractice/javastudy/week4/queue/QueueByListNode.java

 

이상으로 4주차 스터디 포스팅도 마무리하겠습니다. 감사합니다!

 

참고 자료

더 자바, 애플리케이션을 테스트하는 다양한 방법 (강사 : 백기선)

https://www.inflearn.com/course/the-java-application-test/dashboard

반응형

댓글