-
토비의 스프링 - 1권 2장 테스트BackEnd/SpringBoot 2023. 8. 15. 23:49
1. 테스트가 필요한 배경
Dao 회원가입 기능 테스트를 위해서 컨트롤러 서비스 화면등을 만든 뒤 웹을 띄워서 버튼을 누르고 확인 할 수 있지만 오류 발생시 전 계층을 확인해야한다.
( 프레젠테이션 계층, 서비스 계층, 데이터 계층이 참여하도록 한번에 작성했기 때문에 오류가 발생했을때 원인을 파악하기 쉽지 않다. )
2. 단위 테스트
테스트는 관심사를 분리하여 최소 단위별로 테스트를 진행해야 테스트 대상에 집중이 가능하며 수행과정이 단순하여 오류 발생시 원인 찾기가 쉽다.
3. 자동 테스트
때로는 코드에 한줄 수정했는데 예상치 못한 코드에 영향이 가는 경우가 있다 따라서 테스트는 매번 자동으로 수행되도록 해야하는 것이 좋다.
4. 포괄적인 테스트 금지
항상 오류는 원하는 방향에서 컨트롤 되지 않기 때문에 모든 상황을 염두하고 코드를 작성해야한다.
개발자들이 사용하는 말중 "내 피씨에서 잘되는데" 라는 말은 예외 케이스는 피하고 정상케이스만 테스트했다는 의미이기때문이다.
5. TDD
빠르게 기능을 완성하고 싶은 욕심에 테스트를 하지 않는경우 다시 테스트 코드를 만들기 귀찮아진다
실패한 테스트를 성공시키기 위한 목적이 아닌 코드는 만들지 않는다 테스트를 먼저 만들고 테스트가 성공하도록 코드를 작성하는 방식으로
진행하여 테스트를 빼먹지 않고 꼼꼼히 작성할 수 있다.
6. 자바 개발 테스트 도구 - Junit 특징
1. if기능 대신 assertThat을 통해서 1번 파라미터와 2번 파라미터를 비교한다.
2. 테스트 진행 후 자동으로 걸린시간과 결과를 알려준다.
3. 예외 상황은 예상 클래스를 @Test(expect=예외클래스)로 설정한다.
4. 접근 제어자는 public만 사용 가능
5. @Before는 각 @Test 테스트 메서드 작업전 공통으로 수행 할 내용(중복 작업 제거)
6. @After는 @Test 수행후 동작한다.
7. 테스트 클래스는 각 메서드 실행 후 새로 오브젝트를 생성하고 기존 테스트 오브젝트를 버린다.
이러한 이유는 각 테스트의 독립성을 보장하기 위함이다 그렇기 때문에 클래스 변수 사용에도 부담이없다
단 매번 애플리케이션 컨텍스트를 새롭게 로드하기때문에 무거워질수있다.
따라서 @ContextConfiguration(loction="")와 같은 설정파일로 생성된 애플리케이션 컨텍스트는 클래스 간에 공유할 수 있도록 설정해준다.
8. @DirtiesContext는 ContextConfiguration와 반대로 클래스 테스트에서 애플리케이션 컨텍스트의 상태를 변경한다는 알려 공유된 어플리케이션 컨텍스트를 사용 하지않겠다는 의미이다.
9. 어플리케이션 컨텍스트를 DI하지않고 필요한 정보만 @Before에 두어 강제 DI를 해준다면 좀 더 빠르게 테스트를 진행할 수 있다.
'BackEnd > SpringBoot' 카테고리의 다른 글
토비의 스프링 - 1권 5장 서비스의 추상화 (0) 2023.10.05 토비의 스프링 - 1권 4장 예외 (0) 2023.09.13 토비의 스프링 - 1권 3장 템플릿 (0) 2023.08.23 토비의 스프링 - 1권 1장 오브젝트의 의존관계 (0) 2023.08.15