August 23, 2021
단위 테스트는 실행이 빠르다. 고립해서 테스트한다.
단위 - 하나의 클래스를 지칭한다.
테스트 하고자 하는 대상 - SUT
SUT는 혼자 일을 하지 않고 다른 객체와 협력 관계를 가지고, 의존 관게에 있는 다른 객체들이 존재하게 된다. 협력 관계자들을 같이 묶어서 테스트하지 않고 테스트 더블
로 대체해서 SUT 만을 진행하는 것을 단위 테스트라고 한다.
Given - 전제조건
When - 특정 상황(메서드)
Then - 결과 확인
의존 구성요소를 사용할 수 없을 때 테스트 대상 코드와 상호작용하는 객체를 말한다.
가짜 객체 - 스텁 / 목 객체
다른 객체와 연동이 잘 되는지 테스트하는 것이다.
단위 테스트가 끝나면 모듈 간에 연동이 잘 되는지 테스트한다.
외부 시스템과의 연동을 테스트하는 것도 포함한다.
시스템 전체를 보는 것을 End-to-end 테스트
JUnit4 - 확장성이 떨어진다.
JUnit5 - 확장성있게 아키텍처가 개선되었다.
JVM 상에 테스팅 프레임워크를 런칭하기 위한 근간을 제공한다. 테스트를 발견하고 테스트 계획을 생성하는 TestEngine 인터페이스를 가지고 있고, TestEngine을 통해서 테스트를 발견하고 실행하고 결괄르 보고한다.
jupiter-engine : JUnit5용 TestEngine 구현체
jupiter-api를 사용해서 작성한 테스트 코드를 발견하고 실행한다.
vintage-engine : JUnit4용 TestEngine 구현체
JUnit4 버전으로 작성한 테스트 코드를 실행할 때 사용한다.
Mock Object는 행위 검증(behavior verification)을 사용하고, stub을 포함한 다른 대역들은 상태 검증(state verification)을 사용한다.
목 객체는 호출에 대한 기대를 명세한다. 내용에 대해 기술된 객체 - 행위
stub이 실제 가짜 객체 - dummy, fake - 실제 동작하는 것처럼 보이게 만드는 객체
Test Framework - Mockito, JMock, EasyMock
스프링 컨테이너 없이 단위 테스트를 어떻게 해야할지
테스트 시 IoC 컨테이너를 위한 Spring TestContext Famework를 제공한다. 캐시 기능이 있어서 단위 테스트 시 같은 내용의 컨테이너를 재사용해서 빠르게 실행하게 한다.
@ContextConfiguration
@ExtendWith(SpringExtension.class) : 상호작용할 수 있게 해준다.
@SpringJunitConfig : @ExtendWith와 @ContextConfiguration 을 합친 어노테이션이다.