TestContainer 테스트를 위한 키워드 공부

Hansu Park·2023년 12월 14일
0
post-thumbnail
post-custom-banner

배경

프로젝트에서 TestContainer을 이용하여 Mysql을 테스트하는 PR의 리뷰를 맡게 되었다. 모르는 부분이 많아 키워드 위주로 간단히 공부하여 정리한다.

@Import

사용하게 된 이유가 무엇일까?

자바에서의 빈 등록을 위한 설정파일은 @Configuration을 이용해서 설정할 수 있다. 컴퍼넌트 스캔, XML 방식등을 이용해서 클래스에 등록된 빈들을 사용할 수 있다.

@ComponentScan은 패키지를 기준으로 빈들을 읽어오지만,
@Import은 설정한 특정 클래스들만 읽어올 수 있다.

따라서, 특정 클래스들만 읽어와야 하는 테스트의 경우 유용하게 활용될 수 있을 것이다.

참고

@ActiveProfiles

Profile은 스프링에서 여러개의 스프링 빈들을 묶어서 관리하는 것을 의미한다.

  • @Profile로 빈들의 프로필을 설정할 수 있다.
  • application-{profile}.yml로 Properties 파일도 설정할 수 있다.
    - Properties with Spring and Spring Boot | Baeldung
    @ActiveProfiles: 로딩시킬 프로필을 선택할 수 있다.
  • 여러 개의 프로필을 고를 수도 있다.
  • ApplicationContext 객체를 이용하여 고를수도 있다.

느낀점

코인에서는 project.env = {production|stage} 로 체크해줬었는데, 프로필을 통해 설정들을 묶어서 관리할 수 있다는 걸 알게되었다.

테스트와 포트

포트는 프로세스를 구분하는 번호이다.

  • RANDOM_PORT: 로컬포트와 헷갈리지 않기 위하는 목적으로 사용한다. (일반적인 목적)
  • DEFINED_PORT: 외부 API에서 특정 포트를 요구할 때 사용한다. (특수한 목적)
  • @LocalServerPort: 로컬서버의 포트를 int 필드에 매핑한다.

PropertySource

@DynamicPropertySource

동적으로 PropertySource 목록(application.property와 같은 파일들)에 환경변수를 추가할 수 있다.

  • 컴파일 시점에 어떤 값인지 모를 때
  • 테스트 환경일 때
    유용하다.

@PropertySource

@Configuration
@PropertySource("classpath:/~~")

public class AppConfig {

	@Autowired
	Environment env;

	public void printPW() {
		System.out.println(env.getProperty("password"));
	}
}

를 통해 환경파일에 접근하여 값을 가져올 수 있다.

참고

DB Cleaner 방법

TestContainer

도커 컨테이너를 이용하여 프로세스(Mysql, Redis, ElasticSearch 등) 테스트를 돕는 기술.

  • 도커 컨테이너를 사용하여 일관성 유지
  • 코드단위로 컨테이너를 실행하여 설정 간소화
    의 이점이 있다.
post-custom-banner

0개의 댓글