본문 바로가기

Spring/Test

테스트 주도 개발 시작하기 - TDD 시작, TDD란

1. 기능을 검증하는 테스트 코드 작성

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {

    @Test // @Test어노테이션을 붙인 plus()메소드를 테스트 메소드로 인식
    void plus() { // 기능을 검증 할 plus()메소드
        int sum = Calculator.plus(1, 2); // 계산 기능을 실행하는 코드 작성
        assertEquals(3, sum); // 결과가 기대한 값인지 검증, assertEquals(기대값, 실제값) 두 값이 같지 않으면 AssertionFailedError 발생
    }
}

Caculator() 메소드가 없기 때문에 컴파일 에러 발생

 

생각해야할 것

기능을 직관적으로 알수 있게하는 메소드명

그 기능을 제공하려면 메소드의 파라미터의 타입, 개수, 반환 값

메소드를 정적메소드로 구현할지, 인스턴스 메소드로 구현할 지

메소드를 제공할 클래스명

 

2. 컴파일 에러를 없애기 위해 Calculator 클래스 생성

public class Calculator {
    public static int plus(int a1, int a2) { // 메소드 기능 구현이 아닌 컴파일 에러를 없애기 위해 생성한 Plus메소드
        return 0; // 임의로 0을 리턴하게 했음
    }
}

-> 컴파일 에러는 해결했기 때문에 테스트 실행 가능 but 테스트 코드를 실행하면 반환값이 0이기 때문에 테스트를 통과하지 못하고 실패

 

public class Calculator {
    public static int plus(int a1, int a2) { // 메소드 기능 구현이 아닌 컴파일 에러를 없애기 위해 생성한 Plus메소드
        return 3;
    }
}

-> 테스트 코드를 실행하면 반환값이 3이기 때문에 테스트를 통과 성공

 

3. 검증 코드 추가

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class CalculatorTest {

    @Test // @Test어노테이션을 붙인 plus()메소드를 테스트 메소드로 인식
    void plus() { // 기능을 검증 할 plus()메소드
        int sum = Calculator.plus(1, 2); // 계산 기능을 실행하는 코드 작성
        assertEquals(5, Calculator.plus(4, 1)); // 계산 기능을 실행하는 코드 추가 작성
        assertEquals(3, sum); // 결과가 기대한 값인지 검증, assertEquals(기대값, 실제값) 두 값이 같지 않으면 AssertionFailedError 발생
    }
}

-> 새로 추가한 검증 코드로 인하여 테스트 통과 실패

 

4. 검증 코드 2개를 모두 통과시킬 수 있는 메소드로 수정

public class Calculator {
    public static int plus(int a1, int a2) {
        return a1 + a2;
    }
}

 

5. 테스트를 실행하면 2개의 검증 코드 테스트 통과 성공, 기능 검증이 되었으면 src/main/java 소스 폴더로 이동시켜 배포 대상에 포함 시킴

-> src/test/java 폴더는 배포대상이 아니므로 테스트를 성공하여 기능 검증이 완료된되면 배포 폴더로 이동시킴 

 

 

* Assertions.assertEquals()메소드는 두 값이 같은 지 비교하는 단언(assertion)

단언은 값이 특정 조건을 충족하는지 확인하고 충족하지 않은 경우 Exception 발생

JUnit 테스트 코드는 Assertions가 제공하는 여러 메소드를 이용해서 단언을 실행하고, 단언을 통과하지 못하고 Exception 발생 시 테스트에 실패했다고 한다.