Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

청개구리 개발자

JUnit 사용법 및 테스트 [좌표 찍기] 본문

Java

JUnit 사용법 및 테스트 [좌표 찍기]

beConstant 2020. 2. 12. 13:59

Spring Document를 무작정 정독 해보자고 한지 벌써 2주가 넘게 지나고 정말 오랜만에 포스팅을 한다.
(Spring Document에 관한 포스팅은 추후에 하도록 하겠다.)

Spring Core에 대한 도큐먼트를 벌써 반 이상이나 읽은 내 자신이 세삼 오늘 돌이켜 보니까 뿌듯하기도 하다~~

오늘의 포스팅은 Spring에 관한 포스팅이 아닌 동아리의 전 회장(2017년)이자 11번가 finding 개발팀 에서 근무중이신
이혁진(https://github.com/hyukjin-lee)님이 주관하시는 자바스터디
에 관해 포스팅을 해보고자 한다.

오늘은 자바 스터디의 첫 번째 과제인 JUnit 사용법 및 테스트에 관해서 포스팅 해보겠다!!


JUnit 이란? (4.x. 버젼 사용)

JUnit은 자바 프로그래밍 언어용 유닛 테스트 프레임워크이다. 테스트 중심 개발에서 중요한 역할을 하며 xUnit이라고 알려진 단위 테스트 프레임워크 계열중 하나이다.

JUnit의 특징

  • JUnit은 테스트를 작성하고 실행하기위해 사용되어지는 open source framework이다.
  • 테스트 메소드를 식별하기 위한 애노테이션을 제공한다. (ex. @Before, @After, @Test, @Rule, ...)
  • 예측된 결과를 테스트하기 위해서 assertions를 제공한다.
  • 테스트를 실행하기 위한 test runners를 제공한다.
  • 개발자가 품질 좋은 코드를 빠르게 작성할 수 있도록 도와준다.
  • JUnit은 간단해서, 작성하는데 많은 시간이 걸리지 않는다.
  • ...

이제 직접적인 JUnit에 대한 예제를 살펴보기 전에 우리는 2가지에 대해서 알아야 한다.

  1. 프로덕션 코드 : 프로그램 구현을 담당하는 부분으로 사용자가 실제로 사용하는 소스 코드를 의미한다.
  2. 테스트 코드 : 프로덕션 코드가 정상적으로 작동하는지를 확인하는 코드이다.

유닛 테스트란 ?

여러 가지 테스트 방법 중의 하나로, 모든 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다.

 

정의만으로는 이해하기 어려우니까 스터디의 첫 번째 과제인 step0 요구사항에 맞추어 직접 프로덕션 코드와 유닛 테스트 코드를 JUnit을 사용해서 구현 해 보자.


유닛 테스트 예제 [미션 0 : 좌표 구하기 단위 테스트]

요구사항

  • 다음 입력 값에서 x,y 좌표를 추출한다. 

         (8,10)     

  • x,y 값은 1에서 24까지의 값만 유효하다.

위 사항들을 만족하는 프로그램(프로덕션 코드)을 구현한다.

Test Case 목록 구현

  • x,y 좌표 값 하나만 입력하는 경우
  • x,y 좌표 값 두개 이상 입력하는 경우
  • 유효하지 않는 값을 입력하는 경우
    • x가 0이하, 25이상
    • y가 0이하, 25이상

위 사항을 만족하는 Test 클래스를 만든 후, 위 테스트 케이스에 맞는 테스트 코드를 작성한다.

 

프로덕션 코드

import java.util.ArrayList;

public class Extractor {
    public ArrayList<Integer> extractCoordinate(String expression) {
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        for (String element : expression.split("\\(|,|\\)")) {
            if (!element.isEmpty())
                numbers.add(Integer.valueOf(element));
        }
        return numbers;
    }
}

유닛 테스트 코드

import org.junit.Before;
import org.junit.Test;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;

public class ExtractorTest {

    Extractor extractor;

    String expression;

    // @Before 애노테이션이 붙여진 public void 메소드는 Test 메소드가 실행 되기 전에 해당 메소드가 실행됩니다.
    @Before
    public void setup(){
        extractor = new Extractor();
        expression = "(8,1)";
    }
	
    // @Test 애노테이션은 JUnit에게 @Test가 붙은 메소드(public void)를 테스트 케이스로 실행할 수 있음을 알려준다.  
    @Test
    public void testOneCoordinates(){
        assertThat(extractor.extractCoordinate(expression).size()).isNotEqualTo(1);
    }

    @Test
    public void testMoreThanTwoCoordinate(){
        assertThat(extractor.extractCoordinate(expression).size())
                .isLessThanOrEqualTo(2);
    }

    @Test
    public void testCoordinatesValues(){
        for(Integer number:extractor.extractCoordinate(expression))
            assertThat(number).isBetween(1,24);
    }
}

 

'Java' 카테고리의 다른 글

JPA(Java Persistence API)란??  (0) 2020.01.13
Java Servlet 이란??  (0) 2020.01.11
Comments