728x90


 

📖  1단계 - 단위 테스트 연습

  1. 내가 사용하는 API 사용법을 익히기 위한 학습 테스트에서 시작
    • String 클래스에 대한 학습 테스트
    • Set Collection에 대한 학습 테스트
  2. 구현하는 메소드(함수) 중 Input과 Output이 명확한 클래스 메소드(보통 Util 성격의 메소드) 에 대한 단위 테스트 연습

 

 


 

Set Collection에 대한 학습 테스트

 

다음과 같은 Set 데이터가 주어졌을 때 요구사항을 만족해야 한다.

 

 

 

 

여기서 쓰인 @BeforeEach 어노테이션은 

@BeforeEach는 각 테스트 함수가 불리기 전에 매번 호출 됨(JUnit4에서 @Before)

추가로 @BeforeAll은

@BeforeAll은 테스트 함수가 불리기 전에 딱 한 번 호출 됨(JUnit4에서 @BeforeClass)

 

 

 

 

1) Set의 size() 메소드를 활용해 Set의 크기를 확인하는 학습 테스트를 구현

isEqulaTo를 통해 사이즈가 3이 맞는지 테스트

 

 

 

 

 

2) Set의 contains() 메소드를 활용해 1, 2, 3의 값이 존재하는지를 확인하는 학습테스트를 구현, 이때 코드의 중복을 효과적으로 해결하라

 

 

 

우선 코드의 중복을 효과적으로 제거해 줄 수 있는 어노테이션인 @ParameterizedTest 에 대해서 알아보자

 

Parameterized Tests
@ParameterizedTest
이 annotation을 추가하는 것을 제외하고는 다른 테스트와 동일하다.

 

 

1. Simple Value

@ValueSource

  • 해당 annotation 에 지정한 배열을 파라미터 값으로 순서대로 넘겨준다.
  • test method 실행 당 하나의 인자(argument) 만을 전달할 때 사용할 수 있다.
  • 리터럴 값의 배열을 테스트 메서드에 전달한다.

중복이 있는 코드

 

 

위처럼 중복이 있는 코드를

 

 

여기서는 int number 하나의 인자만을 전달함

 

 

이렇게 간단하게 나타낼 수 있다.

 

 

 

@csvSource

  • CsvSource의 value 속성으로 다음과 같이 파라미터를 던질 수 있다.
  • 이렇게 문자열로 구분자 콤마(,)를 기준으로 값을 잘라서 파라미터에 담아줄 것이다.
  • 모든 문자는 String으로 주의하도록 한다.
  • @CsvSource 어노테이션에 delimiter을 직접 정의함으로써 구분자를 지정할 수 있다.

 

중복이 있는 코드

 

 

위의 중복이 있는 코드를

 

 

여기서는 인자가 int element와 boolean expected로 2개이다.

 

 

 

중복이 없이 입력 값에 따라 결과 값이 다른 경우에 대한 테스트도 가능하도록 구현했다.

 

 

 

 

위처럼 delimiter = ' : ' 를 통해 구분자를 커스터마이징도 가능하다.

 

 


 

 

 

 

이렇게 모든 테스트 케이스가 통과되었다.

 

 

 

 

 

 

 

 

 

 

복사했습니다!