Spring 입문주차/1주차

4. 테스트 코드

note994 2024. 8. 10. 21:22

버그를 미리 걸러내기 위해 테스트가 필요하다. 치명적인 버그가 터지면 회사에 큰 손실을 입힐 수 있기 때문이다.

 

1. 블랙박스 테스팅

블랙박스 테스팅이란 소프트웨어 내부 구조나 동작원리를 모르는 블랙박스와 같은 상태에서, 즉 웹 서비스의 사용자 입장에서 동작을 검사하는 방법이다.

장점 

누구나 테스트가 가능하다

 

--

단점

기능이 증가될 수록 테스트의 범위가 증가한다.

시간이 갈수록 테스트하는 사람이 계속 늘어야 한다.

테스트하는 사람에 따라 테스트 퀄리티가 다를 수 있다 -> QA 직군이 있는 이유


2. 개발자 테스트

개발자가 직접 "본인이 작성한 코드"를 검증하기 위해 "테스트 코드"를 작성한다.

장점

빠르고 정확한 테스트가 가능하다 (예상 동작 VS 실제 동작)

테스트 자동화가 가능하다

배포 절차 시 테스트 코드가 수행되어 동작 검증

리팩토링이나 기능 추가를 할 때 더욱 편리하다.

--

단점

개발 시간이 오래걸린다.

테스트 코드를 유지보수 하는 비용

--

Spring에서는 '테스트 코드' 작성을 잘 할 수 있는 환경을 제공해준다. -> JUnit


3. JUnit

 

build.gradle 파일을 열어보면 JUnit 사용을 위한 환경설정이 이미 되어있다.

 

--

 

테스트 파일 생성

 

calculator 패키지를 하나 만들고 그 안에 Calculator.java 파일을 만든다.



계산기

package com.sparta.springprepare.calculator;

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("잘못된 연산자입니다.");
        }
    }
}

Calculator.java 

 

1. "Calculator.java" 파일 내에서 마우스 오른쪽 버튼 클릭 > "Generate..." 클릭

2. "Test..." 클릭

3. 기본세팅 그대로 OK 눌러서 생성

위와 같이 자동으로 경로를 맞춰서 'CalculatorTest' 파일이 생성된 것을 볼 수 있다.

---

 

테스트 코드 작성해보기

package com.sparta.springprepare.calculator;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

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);
    }
}

Java는 반드시 main()메서드로 시작해 main() 메서드로 끝난다고 배웠다.

JUnit은 테스트 실행 환경을 가지고 있기 때문에 바로 main()메서드를 실행하거나 서버를 실행시키지 않아도 이렇게 각각의 메서드 혹은 기능별로 테스트 코드를 작성하여 실행시킬 수 있다.

더 자세한 내용은 이후 강의에서 다룬다

test1() 함수와 test2() 함수 옆쪽에 초록색 실행 표시가 있는데 이걸 누르면 해당 함수만 실행하는 것이다.

 

Assertions.assertEquals(10, result);는 result 값의 예상 값이 10이라고 개발자가 적어놓은 것이다. 만약 예상값과 다른 결과가 나오면 실행 결과에 빨간 글씨로 알려준다.

예상값을 11로 바꿨더니 실제 결과인 10과 다르다면서 오류가 발생한다.