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 발생 시 테스트에 실패했다고 한다.
'Spring > Test' 카테고리의 다른 글
테스트 주도 개발 시작하기 - TDD 시작, TDD 암호 검사기 2 (0) | 2022.11.27 |
---|---|
테스트 주도 개발 시작하기 - TDD 시작, TDD 암호 검사기 1 (0) | 2022.11.27 |
📝 테스트 코드 작성의 장/단점과 테스트 범위에 따른 분류 (0) | 2022.11.18 |
테스트 코드와 제이유닛(JUnit) (0) | 2022.11.16 |
Mock object를 이용한 단위 테스트 (0) | 2022.11.15 |