이번 우아한테크코스 시간에는 테스트 작성 기법과 TDD에 관하여서 학습 및 실습을 하였다. 실제로 페어와 TDD로 의식적으로 개발을 하려다 보니, 테스트 케이스를 어떻게 작성해야 할 지 고민을 많이 하게 되는 것 같고, 무엇보다 junit을 능숙하게 사용하지 못하다 보니 턱턱 막히는 경우가 많아 따로 정리해보려고 한다ㅎㅎ


Dependency


처음에는 왜 자동완성이 안될까 고민했었는데 Dependency 설정을 하지 않아서 문제가 있었음을 알 수 있었다..ㅋㅋ

testImplementation 'org.assertj:assertj-core:3.22.0'
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'

 

애노테이션(Annotation)


Junit을 사용하면 애노테이션을 활용하여 테스트 케이스를 구현할 수 있다.

  1.  @Test
    • 테스트를 진행 할 메소드
    • AssertEquals 등 Assert 클래스의 static 메소드 활용
  2. @BeforeEach
    • 각각의 테스트(@Test)를 진행하기 전에 실행 할 메소드 
  3. @AfterEach
    • 각각의 테스트(@Test)를 진행한 후에 실행 할 메소드
  4. @BeforeAll
    • 모든 테스트를 실행하기 전에 단 한번만 실행되는 메소드
    • static으로 선언
  5. @AfterAll
    • 모든 테스트를 실행한 후에 단 한번만 실행되는 메소드
    • static으로 선언

BeforeAll과 AfterAll이 static으로 선언되는 이유는 static으로 선언해 두어야 각 테스트를 실행하기 전에 실행되어지기 때문이라고 한다.


예시


  • BeforeEach 애노테이션을 통해 테스트 진행 전, numbers에 값을 설정해 준다.
    • 이 때, Set 자료구조의 특성상 중복된 1은 제거된다.
  • Test 애노테이션에서는 실제 테스트가 진행된다.
    • BeforeEach의 결과로 Set 자료구조에는 [1, 2, 3]이 들어가 있다.
    • 따라서, size()는 3이어야 하므로 이를 assertEquals 메소드를 통해 테스트를 진행한다.
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

private Set<Integer> numbers;

@BeforeEach
void setUp() {
    numbers = new HashSet<>();
    numbers.add(1);
    numbers.add(1);
    numbers.add(2);
    numbers.add(3);
}

@Test
void setSizeTest() {
    assertEquals(numbers.size(), 3);
}

 

 

+ Recent posts