TEST (1)

김재익·2023년 6월 23일
0

JAVA

목록 보기
15/18
post-thumbnail

테스트 코드의 필요성

예를 들어 주문하는 사이트에서 주문이 동작하지 않는다거나 10만원을 결제했는데 100만원이 결제 된다거나 피크시간대에 서버가 다운되어버린다거나 하면 사용자는 해당 사이트를 신뢰할 수 없게 된다.

이러한 버그들을 서비스를 내보내기 전에 최대한 많이 찾아내서 제거하기 위해 우리는 테스트라는 것을 거쳐 버그를 확인해야한다.

Junit

Spring에서는 테스트코드를 작성하기 위한 환경으로 Junit이라는 것을 제공한다. 이는 자바 프로그래밍 언어용 단위 테스트 프레임워크 라고한다.
테스트 실행 환경을 따로 가지고 있어 main메소드를 실행하거나 서버를 따로 실행시키지 않아도 동작하며 각 메서드별로 동작해볼 수 있는 환경을 제공해준다.

예시

public class Calculator {
    public Double operate(double num1, String op, double num2) {
        switch (op) {
            case "*":
                return num1 * num2;
            case "/":
                if (num2 != 0) {
                    return num1 / num2;
                } else {
                    return null;
                }
            case "+":
                return num1 + num2;
            case "-":
                return num1 - num2;
            default:
                throw new IllegalArgumentException("잘못된 연산자입니다.");
        }
    }
}

계산기의 기능에 관해 테스트 해보기 위해 계산기 클래스를 구현해준다.

그리고 test폴더안에 똑같은 디렉토리구조를 가진 폴더를 만들어준 후에 테스트하려는 클래스이름 뒤에 Test를 붙여 만들어준다.(명시적인 이유)


인텔리제이의 경우 자동으로 생성해주는 기능이 있다.(해당 클래스에서(ctrl+shift+T)

class CalculatorTest {
    @Test
    @DisplayName("더하기 테스트")
    void test1() {
        Calculator calculator = new Calculator();
        Double result = calculator.operate(8, "+", 2);
        System.out.println("result = " + result);

        Assertions.assertEquals(10, result);
    }

    @Test
    @DisplayName("나누기 테스트")
    void test2() {
        Calculator calculator = new Calculator();
        Double result = calculator.operate(8, "/", 2);
        System.out.println("result = " + result);

        Assertions.assertEquals(4, result);
    }
}

테스트할 코드를 짜주고 실행하면 된다. 테스트 메서드의 이름은 되도록이면 해당 테스트가 어떤 것인지 알기 쉽게 지어주면 좋다.

추가 설명

@Test

해당 코드가 테스트목적임을 알려주는 애너테이션이다.

@DisplayName

각 테스트의 이름을 적을 수 있다. 어떤 테스트인지 간략한 설명을 담은 이름을 적으면 좋다.
이 것을 작성하는 이유는 여러가지 테스트를 한번에 실행했을 때

좀 더 쉽게 확인할 수 있기 때문이다.

Junit5

junit5 부터는 접근제한자를 따로 적어주지 않아도 된다.

Assertions

테스트한 기능의 결과와 개발자가 예상한 사용자가 얻어야할 올바른 값이 같은지 확인할 때 사용한다. 이 메소드를 사용하면 실패 했을 경우 해당 테스트를 실패로 처리할 수 있다.

@Test
    @DisplayName("더하기 테스트")
    void test1() {
        Calculator calculator = new Calculator();
        Double result = calculator.operate(8, "+", 2);
        System.out.println("result = " + result);

//        Assertions.assertEquals(10, result);
        Assertions.assertEquals(8, result);
    }

결과값을 10이 아닌 8로 수정해서 동작시킬 경우

이렇게 실패했다고 알려준다.

Edge

예를 들어 계산기의 경우 더하기, 빼기, 나누기, 곱하기, 나누기의 if, default 예외처리 까지 총 6개의 기능이 있는데
각 기능을 엣지(Edge)라고 한다.

모든 Edge를 전부 확인한 경우 우리는 테스트를 완벽하게 했다 라고 할 수 있다.

개발자 테스트를 시행하면 개발 시간이 오래걸린다 라고 말하는데 이는 모든 Edge를 테스트 해보기 위해 시간을 많이 사용하기 때문에 나온 말이다.

profile
개발자호소인

0개의 댓글