토비의 스프링 요약 (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 할 수 있음
  • 오류에 대비해 버그테스트를 만들어 놓으면 좋음
  • 기술의 사용방법을 익히고 이해를 돕기위해 학습 테스트를 작성하자.


+ Recent posts