ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 토비의 스프링 2. 테스트
    공부일기/스프링 2021. 5. 16. 14:21

    UserDaoTest 다시보기

    테스트의 유용성

    테스트란 내가 예상하고 의도했던 대로 코드가 정확하게 동작하는지 확인해 만든 코드를 확신할 수 있게 해주는 작업이다.

    작은 단위의 테스트

    테스트하고자 하는 대상이 명확하다면 그 대상에만 집중해서 테스트하는 것이 바람직하다. 테스트는 가능하면 작은 단위로 쪼개서 해야 정확한 원인을 찾기 쉽다.(테스트의 관심사 분리)

    단위 테스트

    단위 테스트에서 단위는 그 크기와 범위가 어느 정도인지 정확하게 정해진 건 아니다. 크게봐서 사용자 관리 기능을 하나의 단위로 볼 수도 있고, 작게 보면 add()와 같은 메소드 하나를 단위라고 생각할 수도 있다. 충분히 하나의 관심에 집중해 효율적으로 테스트할 만한 범위의 테스트를 단위 테스트라 할 수 있다.
    일반적으로 단위는 작을수록 좋다. 작은 단위로 나눠서 하는 테스트는 개발자가 설계하고 만든 코드가 의도대로 동작하는지 개발자 스스로 빨리 확인할 수 있게 한다.

    DI와 테스트

    인터페이스를 두고 DI를 적용해야 하는 이유 3가지

    1. 소프트웨어 개발에서 절대로 바뀌지 않는 것은 없다. 당장 클래스를 바꿔서 사용할 계획이 전혀 없더라도, 언젠가 변경이 필요한 상황에서 수정에 들어가는 시간과 비용의 부담을 줄일 수 있다.
    2. 클래스의 구현 방식은 바뀌지 않아도 인터페이스를 두고 DI를 적용하게 하면 다른 차원의 서비스 기능을 도입할 수 있다. 새로운 기능을 넣기 위해 기존 코드를 수정할 필요가 없다.
    3. 효율적인 테스트를 손쉽게 만들기 위해서이다. DI는 테스트가 작은 단위의 대상에 대해 독립적으로 만들어지고 실행되게 한다.

    DI를 이용한 테스트 방법 선택

    항상 스프링 컨테이너 없이 테스트할 수 있는 방법을 가장 우선적으로 고려한다.

    학습테스트

    학습 테스트의 장점

    • 다양한 조건에 따른 기능을 쉽게 확인할 수 있다.
    • 학습 테스트 코드를 개발 중에 참고할 수 있다.
    • 프레임워크나 제품 업그레이드시 호환성 검증을 도와준다.
      ...

    정리

    • 테스트는 자동화돼야 하고, 빠르게 실행할 수 있어야 한다.
    • 테스트 결과는 일관성이 있어야 한다. 코드의 변경 없이 환경이나 테스트 실행 순서에 따라서 결과가 달라지면 안 된다.
    • 테스트는 포괄적으로 작성해야 한다. 충분한 검증을 하지 않는 테스트는 없는 것보다 나쁠 수 있다.
    • 코드 작성과 테스트 수행의 간격이 짧을수록 효과적이다.
    • 테스트하기 쉬운 코드가 좋은 코드다.
    • 테스트 코드도 애플리케이션 코드와 마찬가지로 적절한 리팩토링이 필요하다.
    • @Before, @After를 사용해서 테스트 메소드들의 공통 준비 작업과 정리 작업을 처리할 수 있다.
    • 스프링 테스트 컨텍스트 프레임워크를 이용하면 테스트 성능을 향상시킬 수 있다.
    • 동일한 설정파일을 사용하는 테스트는 하나의 애플리케이션 컨텍스트를 공유한다.
    • @Autowired를 사용하면 컨텍스트의 빈을 테스트 오브젝트에 DI 할 수 있다.
    • 기술의 사용 방법을 익히고 이해를 돕기 위해 학습 테스트를 작성하자.
    • 오류가 발견될 경우 그에 대한 버그 테스트를 만들어두면 유용하다.
Designed by Tistory.