첫 기술 면접을 본 회사에서
과제전형 때 꼭 테스트 코드를 짜서 제출하라고 했었는데,
그때까지만 해도 테스트 코드의 중요성을
생각해 본 적 없었고, 짜본적도 없었다.
기술 면접땐 면접관이 왜 테스트 코드를 짜서
제출하라고 했는지 알겠냐고
회사의 의도를 나한테 물어봤었는데,
나는 테스트 코드를 작성함으로써 오류를 미연에 방지하는 등의 기본적인 답변과
면접자가 자신이 짠 코드에 대해
코드의 흐름을 얼마나 잘 파악하고 있는 지를 알고자
제출을 요청한 것일거 같다고 했다.
지금 생각해도 마지막 답변은 꽤 괜찮다고 생각하는데 떨어졌기에...
뭐 여튼
Spring의 MVC는 어느정도 다 배우고
이제 test를 학습하게 되었다
Unit test는 단위 테스트로
메서드 레벨로 테스트를 진행하는것이다.
일반적으로 단위 테스트는
최대한 독립적인 것이 좋고,
최대한 작은 단위인 것이 좋다고 한다.
독립적이고 작아질 수록 다른 기능은 생각할 필요가 없어
테스트 코드 짜는게 단순하고 빨라지기 때문
단위 테스트 케이스를 작성하기 위해
FIRST원칙을 참고하면 좋다.
- Fast 빠르게
- Independent 독립적으로
- Repeatable 반복이 가능하도록
- Self-validating 자체 검증이 되도록
- Timely 시기적절하게
테스트 케이스를 작성할 때
given
when
then
으로 나누어
BDD 형식으로 케이스를 작성할 수 있다.
given
테스트를 위한 중비과정
테스트 대상에 전달되는 입력 값
when
테스트할 대상을 지정
then
테스트 결과 검증
보통 단위 테스트를 진행할 때
Junit을 많이 사용한다고 한다
가장 간단한거 같다.
...
import static org.junit.jupiter.api.Assertions.assertTrue;
public class Test {
@BeforeAll
public void beforeAll(){
...
}
@BeforeEach
public void beforeEach(){
...
}
@DisplayName("Case 1")
public void case1() {
// given
...
// when
...
// then
assertTrue(A==B);
}
}
Before~
After~
annotation을 사용해
테스트 케이스의 실행 전후 상황이나 조건 등을
설정할 수 있다.
~All
의 경우 첫 테스트 케이스가 실행 되기 전이나
마지막 테스트 케이스가 실해된 후 '한 번만' 실행 되며
~Each
의 경우 각 테스트 케이스가 실행 되기 전이나
후에 '매 번' 실행된다.
assert~
메서드를 통해
then
테스트 결과를 검증할 수 있다.