Skip to main content

Spring Testing

Unit Testing

F.I.R.S.T Principle

  • Fast
  • Independent
  • Repatable
  • Self-validating
  • Timely

Given-When-Then

  • Given: 테스트 전 상태, 조건
  • When: 테스트 동작
  • Then: 테스트 결과 검증

Further Reading

Java Testing Frameworks

JUnit 5

Hamcrest

Other Testing Frameworks

Test Slicing in Spring

API 계층 테스트

  • @SpringBootTest, @AutoConfigureMockMvc, MockMvc
  • Tomcat 구동 없이 테스트 가능

References

Further Reading

데이터 액세스 계층 테스트

  • Spring Data JPA: @DataJpaTest
  • Spring JDBC: @JdbcTest
  • Spring Data JDBC: @DataJdbcTest
  • Spring Boot에서 @Transactional을 포함한 테스트는 테스트 메소드를 마치고 해당 트랜잭션을 롤백하는 것을 기본값으로 한다.

References

Mockito

Mock, Stub, and Fake

Mock, stub, fake는 비슷한 의미를 가지고 있어서 혼용되곤 한다.
사용하는 사람, 문서에 따라 각각의 정의를 다르게 하는 경우가 있어서 정확한 구분도 힘들다.
Mockito 등 사용하는 라이브러리에서의 용법을 따르는 것이 맞는 것 같다.

References

TDD

  • 필요한 모든 조건을 확인하는 테스트를 먼저 작성한 후 실패하는 테스트를 점진적으로 성공시켜 가는 식으로 개발
  • 테스트 실행 결과가 failed인 테스트 케이스를 지속적, 단계적으로 테스트 케이스 실행 결과가 passed가 되도록 수정
  • 테스트 케이스가 passed될 만큼의 코드만 우선 작성, 리팩토링

TDD의 장점

  • 테스트와 기능 구현, 리팩토링까지 빠르게 진행 가능
  • 테스트를 통과 할 만큼의 기능을 구현하므로 한번에 많은 기능을 구현할 필요가 없음
  • 테스트의 코드가 추가되면서 검증하는 범위가 넓어질 수록 기능 구현도 점진적으로 완성
    • 단순한 기능에서 복잡한 기능으로 확장되면서 그때그때 검증을 놓치지 않을 수 있음
  • 리팩토링을 그때그때 빠르게 진행하기 때문에 리팩토링의 비용이 상대적으로 줄어듬
  • 테스트 케이스가 있기 때문에 코드 수정에 부담이 적음
  • 리팩토링을 통해 꾸준히 코드를 개선하므로 코드 품질 유지에 유리
  • 코드 수정 후 바로 테스트를 진행할 수 있으므로 코드 수정 결과를 빠르게 피드백 가능

TDD의 단점

  • 개발 방법론을 익히는 시간이 필요
  • 테스트 코드의 작성에 익숙하지 않거나 작성을 원치 않는 경우에 적용할 수 없음
  • 팀 단위로 개발을 진행해야 하므로 팀원 간 사전 협의 필요

Further Reading