비즈니스 로직이 주로 단위 테스트의 대상이 되며, 단위테스트 코드는 메서드 단위로 대부분 작성된다.
단위테스트는 우리가 작성한 코드가 우리의 기대대로 빠르게 동작하는지 확인할 수 있는 테스트이다. 따라서 최대한 독립적이며 작은 단위일 수록 좋다.
왜냐하면, 연관된 기능들을 생각하지 않아도 되기 때문이다. 또한 테스트 코드가 단순해져 빠르게 테스트를 수행할 수 있다.
DB를 사용하는 단위테스트일 경우, 데이터베이스의 상태가 테스트 전/후로 동일하게 유지된다면 단위테스트에 포함 될 수 있다.
1️⃣ Postman을 열어 HTTP요청을 보내는것과 같은 번거로운 일들을 단위 테스트를 통해 단순화 시켜 생산성을 높일 수 있다.
2️⃣ 우리가 작성한 코드가 우리의 의도대로 코드가 기능하는지 결과를 빠르게 확인할 수 있다.
3️⃣ 단위테스트를 통해 버그를 미리 찾아 문제를 해결할 수 있다.
4️⃣ 버그 리포트를 전달받을 경우 버그가 발생한 코드(기능)의 테스트 케이스를 통해 문제가 발생한 원인을 단계적으로 찾기에 용이하다.
💡 테스트케이스란?
테스트를 위한 입력 데이터, 실행조건, 기대결과를 표현하기 위한 명세를 의미한다.
비지니스 로직에서 메서드 단위를 테스트하기 위해 작성된 코드로 이해하면 된다. 이 테스트 코드안에는 입력데이터, 실행조건, 기대결과의 로직이 포함되기 때문이다.
F (Fast, 빠르게)
I (Independent, 독립적으로)
R (Repeatable, 반복 가능하도록)
S (Self-validating, 셀프 검증이 되도록)
T (Timely, 시기 적절하게)
자바 기반의 소프트웨어를 테스트하기 위해 사용하는 표준 테스트 프레임워크
단위테스트를 제일 쉽고 빠르게 적용할 수 있는 것이 바로 헬퍼(helper) 클래스 or 유틸리티(utility) 클래스이다.
예를들어,
커피를 주문한 회원이 보유한 스탬프의 갯수 + 회원이 주문한 커피 수량 = 누적 스탬프의 수 |
---|
누적 스탬프의 수를 계산해주는 헬퍼클래스가 있다고하자.
[JUnit을 사용하지 않은 단위테스트 코드]
public class StampCalculatorTestWithoutJUnit {
public static void main(String[] args) {
calculateStampCountTest();
}
private static void calculateStampCountTest() {
// given
int nowCount = 5;
int earned = 3;
// when
int actual = StampCalculator.calculateStampCount(nowCount, earned);
int expected = 7;
// then
System.out.println(expected == actual);
}
}
주석처리 된 given - when - then 용어는 BDD테스트 방식에서 사용하는 용어이다.
가독성을 높이는데 유용한 방법이다.
테스트 결과를 검증할 때 사용하는 용어이다.
- '테스트 케이스의 결과가 참(true)이길 바라는 것'으로 이해하면 된다.