JUnit 테스트(토비의스프링1-2장)
JUnit 테스트(토비의스프링1-2장)
개발자가 자신의 코드가 잘 작동함을 확인하기 위해 테스트가 필요
다 만들어 놓고 테스트하면 어디서 잘못 되었는지 알 수 없기 때문에 작은 단위로, 반복을 위해 자동테스트 되도록
스프링에서 제공하는 JUnit을 사용해보자 assertThat(①, is(②)); -> ①이 ②와 동일한가? 동일하면 성공
JUnit 테스트 조건
1) Public 접근자
2) @Test
3) 리턴값이 void형
4) 파라미터가 없음
한번에 여러개 테스트 가능 but 특정한 테스트 메소드의 실행 순서를 보장해주지 않는다. (순서에 영향 받는다면 테스트 잘못 만든 것이고, 모든 테스트는 실행 순서와 상관없이 독립적으로 항상 동일한 결과를 낼 수 있도록 해야 한다.)
예외조건 테스트 값이 없다면? null반환 또는 설정한 값 반환하는 방법 먼저 스프링의 EmptyResultDataAccessException 이용해봄 @Test에 excepted 추가해놓으면 정상작동시 실패, 정해진 예외 던져지면 성공하도록 처리 예외 발생해야하는 경우 테스트 하고 싶을때 사용
부정적인 케이스를 먼저 만드는 습관을 들이는 게 좋다.
기능설계를 위한 테스트 : 추가하고 싶은 기능을 코드로 표현 테스트할 코드 만들기 이전에 테스트 ? how to??? 테스트 주도 개발(=테스트 우선 개발) 테스트 시나리오 작성 후 그렇게 작동되는지 확인
기대 효과 : 작성한 코드에 대한 확신, 마음의 여유 주는 방법 테스트 작성 및 성공시키는 코드 만드는 작업 주기 가능한 짧게 가져가도록 권장
개발자는 테스트를 만들기 어렵다고 생각하고 스킵하는데 이전과 달리 스프링이 제공하는 기능을 사용하면 쉽게 만들 수 있다.
테스트는 애플리케이션 코드보다 상대적으로 작성이 쉽고 오류를 빨리 잡아낼 수 있어서 전반적인 개발 속도는 오히려 빨라진다.
JUnit이 하나의 테스트 클래스를 가져와 테스트를 수행하는 방식
1) 테스트 클래스에서 @Test가 붙은 Public이고 void형이며 파라미터 없는 테스트 메소드 모두 찾기
2) 테스트 클래스의 오브젝트 하나 만들기
3) @Before가 붙은 메소드 있으면 실행
4) @Test가 붙은 메소드를 하나 호출하고 테스트 결과 저장
5) @After가 붙은 메소드 있으면 실행
6) 나머지 테스트 메소드에 대해 2~5번 반복
7) 모든 테스트 결과 종합해서 돌려줌
중복코드를 @Before가 달린 클래스로 메소드화해서 넣기, 로컬변수는 인스턴트 변수로 바꿀 것(리팩토링) 일부만 중복이면 테스트코드에서 부르도록 만드는 방법도 생각해 볼 수 있음 테스트 메소드 실행할 때마다 새로운 오브젝트 만드는 특징(테스트간 영향 안주도록)
애플리케이션 컨텍스트가 만들어질 때는 모두 싱글톤 빈 오브젝트를 초기화 한다.
@BeforeClass 테스트 클래스 전체에 걸쳐 딱 한번만 실행되는 스태틱 메소드
애플리케이션 컨텍스트 관리 @RunWith @ContextConfiguration @Autowired
한번 만들어서 공유하게 하면 속도 빨라짐