HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
토비의 스프링 3.1 Vol.1 스프링의 이해와 원리
토비의 스프링 3.1 Vol.1 스프링의 이해와 원리
/
2️⃣
2장 - 테스트
2️⃣

2장 - 테스트

@See Also)
📝
테스트
 
스프링이 개발자에게 제공하는 가장 중요한 가치는 객체지향과 테스트
 

테스트란

예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서 만든 코드를 화신할 수 있게 해주는 작업 - 토비
테스트란 개발자가 마음 편하게 잠자리에 들 수 있게 해주는 것 - 켄트 벡
 

테스트의 가치와 장점

  • 테스트를 통해 코드의 설계나 결함을 확인 할 수 있다.
    • 리팩토링에 대한 두려움이 없어진다.
  • 테스트는 그 자체로 코드에 대한 명세가 된다.

테스트의 활용 전략

📝
Unit Test - 마틴 파울러
 

테스트 주도 개발 - Test-Driven Development, TDD

테스트 주도 개발의 세 가지 단순한 규칙

  • 해당 코드가 없어서 실패하는 테스트 코드를 쓰기 전에 제품 코드를 먼저 쓰면 안 된다.
  • 테스트 코드를 쓸 때 실패하도록 만들기 위해 필요한 것 보다 더 많이 쓰면 안 된다. 컴파일 실패도 실패로 간주한다.
  • 실패하는 테스트를 통과시키기 위해 필요한 코드보다 더 많은 제품 코드를 쓰면 안 된다.

테스트 주도 개발의 좋은 점

  • 작업하던 코드는 아무리 길어도 1분 전까지는 실행 가능했고, 테스트를 모두 통과한다.
    • 디버깅이 필요없다. 디버깅은 선망할 만한 기술이 아니다.
  • 테스트는 전체 시스템의 코드 예제가 된다.
  • 제품 코드 → 테스트/ 테스트 → 제품 코드 : 전자는 재미없다. 후자는 재미 있다.
  • 테스트 코드는 개발자의 설계에 대한 고민을 유도 하고 더 잘 분리된 설계로 이끈다.
  • 테스트 코드는 과감한 리팩토링을 위한 용기를 준다.
 
 

Note

  • 테스트 코드 자체가 이미 자신에 대한 테스트라고 생각할 수 있다.
  • 테스트 결과가 일정하게 유지된다면 얼마든지 리팩토링을 해도 좋다.
 

Junit5 의 실행 스텝

아주 오래된 책이라 junit4 를 기준으로 설명을 하고 있으며 내용도 어렵지 않은것 같아서 생략하려고 했는데 Junit5의 테스트 수행 사이클은 한번 정리하는 것이 좋을것 같아 181쪽에 나오는 7 단계의 junit 실행 스텝을 junit5에 맞게 조금 더 풀어서 찾아보고 알고 사용해본 기능내에서 정리했습니다.

notion image
 
notion image
 
하나의 테스트 클래스를 실행하는 과정
  1. Container (Test Class)에서 Test(Test Method)를 모두 찾는다.
  1. 테스트 인스턴스의 라이프 사이클을 확인한다.
    1. @TestInstance(Lifecycle.PER_CLASS)
    2. @TestInstance(Lifecycle.PER_METHOD) - default
 
  1. 테스트 클래스의 오브젝트를 하나 만든다.
  1. @BeforeAll 메서드가 있다면 실행한다.
  1. @BeforeEach 메서드가 있다면 실행한다.
  1. 테스트 실행 순서 전략을 통해 실행할 테스트를 결정한다.
  1. 테스트 메서드를 하나 호출하고 테스트 결과를 저장한다.
  1. @AfterEach 메서드가 있다면 실행한다.
 
  1. 나머지 테스트 메서드에 대해
    1. 테스트 인스턴스 라이프 사이클이 PER_CLASS라면 3~8을 반복한다.
        • @BeforeAll, @AfterAll 메서드의 static 여부에 따라 실행 순서가 달라 질 수 있다.
    2. 테스트 인스턴스 라이프 사이클이 PER_METHOD라면 5~8을 반복한다.
 
  1. @AfterAll 메서드가 있다면 실행한다.
  1. 모든 테스트의 결과를 종합해서 돌려준다.
 

테스트와 스프링의 관계

Junit5에서는 @SpringBootTest 어노테이션으로 간편하게 spring container를 사용할 수 있다.
 

학습 테스트로 배우는 스프링

  • 학습 테스트에 관한 내용은 자바지기 박재성님의 아래 영상을 참고하자
테스트 기반으로 thymeleaf 학습하기
테스트 기반으로 thymeleaf 학습하기
https://www.youtube.com/watch?v=xmNlbJgdD5A&ab_channel=%EB%B0%95%EC%9E%AC%EC%84%B1
테스트 기반으로 thymeleaf 학습하기