토비의 스프링 요약 (ch2 -테스트)(2)
Autowired : xml에 등록한 Bean과 같은 타입을 찾아서 DI해준다.
절대바뀌지 않는 상황에도 인터페이스를 활용한 DI를 적용해야할까?
- YES!!
- 절대로 바뀌지 않는것은 없다
- 다른 차원의 서비스를 도입 할 수 있다 - (예: 부가기능으로 count를 한다던지..)
- 효율적인 테스트를 위해서
테스트 코드에 의한 DI
- 테스트에서, 실제로 사용하는 DB를 사용? -> 위험
- 테스트 코드 내에서 직접 DI하기 \
- @DritiesContext : 해당 테스트에서 에플리케이션 컨텍스트 상태를 변경하겠다 (예 : db변경)
테스트를 위한 별도 DI설정
- 수동으로하면 번거롭다
- test-applicationContext.xml 생성!
<!-- url 부분에 test시에 사용할 DB로 바꿈! -->
<bean id="dataSoource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/testdb" />
<property name="username" value="user" />
<property name="password" value="pass" />
</bean>
- test시에 @ContextConfiguration에 있는 lotation 을 test용으로바꿈,
컨테이너 없이 DI테스트
- 목적이 분명하다면 해당 Object를 직접 생성하여 만든다
- API에 의존하지 않고 관심에만 집중하여 깔끔하게 만든다.
- API에 종속되지 않고 비 침투적 기술로, 스프링에 의존하지않고도 DI가능
어떤것이 좋은가??
- 일단 컨테이너 없이 테스트 하는것을고려
- 복잡하다면 Spring 설정을 사용
- 영향을 주지 않게 하려면 테스트 설정을 따로 만든다.
학습테스트 - learning test
- 다른사람이 만든 코드와 기능에 대한테스트
- 프레임워크나 라이브러리에 대해서도 테스트
학습 테스트의 장점
- 해당 코드의 기능을 다양한조건을 활용해서 쉽게 확인할 수 있음
- 테스트 코드를 참고하여 개발에 활용 할 수 있음.
- 업데이트할때 호환성 검증
- 테스트 코드 작성 훈련
- 새로운 기술을 배울대 즐거워짐…??? (오래 기억에 남는다)
버그테스트
- 요류를 알려줄 수 있는 테스트
- 버그를 알았을 경우, 그 버그로 인해 실패할만한 케이스를 만들고 성공하도록 코드수정
- 장점
- 테스트의 완성도가 높아짐
- 버그의 내용을 명확하게 분석 할 수 있다.
- 기술적인 문제를 해결하는데 도움이 됨.
정리
- 테스트는 자동화, 빠르게실행가능해야함 -> JUnit사용
- 일관성 보장, 순서에따라 달라지며안됨
- 테스트하기 좋은코드가 좋은코드
- 테스트를 먼저 만들고 이를 성공으로바꿔가는 TDD방법
- @Before, @After와같은 작업으로 공통코드를 줄일 수 있음
- 스프링 테스트 컨텍스트 프레임워크를 사용하여 성능 향상 가능
- @Autowired를 사용하여 오브젝트에 DI 할 수 있음
- 오류에 대비해 버그테스트를 만들어 놓으면 좋음
- 기술의 사용방법을 익히고 이해를 돕기위해 학습 테스트를 작성하자.