1. JUnit 테스트 수행 방식
수행 방식
- @Test 어노테이션이 붙은 void 테스트를 모두 찾는다.
- 테스트 클래스의 오브젝트를 하나 만든다.
- @BeforeEach 가 붙은 메소드가 있으면 수행한다.
- @Test 가 붙은 메소드를 하나 호출하고 결과를 저장한다.
- @AfterEach 가 붙은 메소드가 있으면 수행한다.
- 2~5를 반복한다.
- 모든 테스트의 결과를 반환한다.
이 중에서도, 2번
- @Test 를 수행할 때마다 새로운 오브젝트를 만든다.
- 독립적인 수행을 보장하기 위해서.
2. 테스트를 위한 ApplicationContext 관리
테스트를 만들때마다 새로운 오브젝트를 초기화해주는 과정에서, ApplicationContext를 매번 만드는 것은 빈이 많아지면 시간 / 자원 소모가 크다.
- 이를 위해서 @Autowired 를 사용하여 ApplicationContext를 주입받자
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {DaoFactory.class})
class UserDaoTest {
@Autowired
ApplicationContext context;
// ...
}
@ExtendWith(SpringExtension.class)
- SpringExtension.class 는 JUnit 이 실행되는 과정에서 ApplicationContext 를 만들고, 관리하는 역할을 한다.
@ContextConfiguration(classes={})
- 내가 빈으로 등록한 @Configuration 어노테이션을 사용한, 내가 테스트내에서 사용할 클래스를 주면 된다.
- xml을 사용한다면 토비의스프링 책에있는 방법을 사용한다.
여러 테스트클래스에서 같은 설정파일을 공유한다면, 스프링은 ApplicationContext를 공유하게 해준다.
@DirtiesContext
- 해당 클래스 / 메소드에서 ApplicationContext의 빈의 정보를 변경해서 사용할 것임을 명시
- 위에 말했듯, ApplicationContext가 빈의 정보를 공유하기 때문에 해당 어노테이션을 명시하여 공유되지 않도록 해야한다.
'책 정리 > 토비의 스프링' 카테고리의 다른 글
6.1. AOP (0) | 2021.02.02 |
---|---|
5. 서비스 추상화 (0) | 2021.02.01 |
4. 예외 (0) | 2021.01.30 |
3. 템플릿 (0) | 2021.01.23 |
1장 오브젝트와 의존관계 (0) | 2021.01.19 |