본문 바로가기
책 정리/토비의 스프링

2. 테스트

by 이석준석이 2021. 1. 23.

1. JUnit 테스트 수행 방식

 

수행 방식

  1. @Test 어노테이션이 붙은 void 테스트를 모두 찾는다.
  2. 테스트 클래스의 오브젝트를 하나 만든다.
  3. @BeforeEach 가 붙은 메소드가 있으면 수행한다.
  4. @Test 가 붙은 메소드를 하나 호출하고 결과를 저장한다.
  5. @AfterEach 가 붙은 메소드가 있으면 수행한다.
  6. 2~5를 반복한다.
  7. 모든 테스트의 결과를 반환한다. 

이 중에서도, 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