일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 미션
- 의존성
- 스프링부트
- Docker
- 서블릿
- mock
- 코드리뷰
- REDIS
- 프로그래머스
- CircuitBreaker
- 세션
- Level2
- AWS
- 백준
- 레벨2
- JPA
- 트랜잭션
- 우아한테크코스
- 자바
- HTTP
- 우테코
- yml
- JUnit5
- 프리코스
- MSA
- Paging
- 스프링 부트
- 우아한세미나
- Spring Batch
- AOP
- Today
- Total
늘
테스트 코드의 어노테이션을 줄여보자 그리고 테스트 컨텍스트 캐싱의 이점을 얻자 본문
현재 프로젝트가 어느 정도 진행되면서 Test위에 붙는 Import도 늘어났다. 아래 사진처럼 매번 Repository 테스트를 할 때마다 붙여줘야 하는데 불편해서 어노테이션을 만들어서 정리를 해보았다.
사실 포스팅 할만한 정도로 대단할 건 없지만 앞으로도 프로젝트를 진행하면 자주 적용할 것 같아서 기록해두려고 한다.
메타 어노테이션을 활용하여 위와 같이 작성해주면 끝!
이제 @Repository만 작성하면 간편하게 적용이 가능하다. 또한 스프링은 테스트 시 매번 컨텍스트를 띄우지 않고 테스트가 사용하는 컨텍스트를 캐싱해서 여러 테스트가 1개의 (애플리케이션) 컨텍스트를 공유하는 방법을 제공한다. 즉, 테스트마다 동일한 컨텍스트를 사용하면 컨텍스트가 1번만 올라가므로 테스트 성능에도 좋다.
1) @Repository만 작성하면 간편하게 적용이 가능하다.
2) (레포테스트기준)컨텍스트가 1번만 올라가므로 테스트 성능에도 좋다.
이렇게 끝내면 아쉬우니 어노테이션을 정리해보자.
Java의 어노테이션은 크게 built-in 어노테이션과 Meta 어노테이션이 존재한다. 메타 데이터의 메타와 마찬가지로 어노테이션을 위한 어노테이션이다.
built-in어노테이션은 흔히 아는 @Overried, @Deprecated, @SuppressWarnings 등이 있다.
메타 어노테이션
Retention
해당 어노테이션의 정보를 어느 범위까지 유지할 것인지를 설정한다.
- RetentionPolicy.SOURCE: 컴파일 전까지만 유효하며 컴파일 이후에는 사라짐
- RetentionPolicy.CLASS: 컴파일러가 클래스를 참조할 때까지 유효함
- RetentionPolicy.RUNTIME: Reflection을 사용하여 컴파일 이후에도 JVM에 의해 계속 참조가 가능함
Target
해당 어노테이션이 사용되는 위치를 결정한다.
- ElementType.PACKAGE : 패키지 선언 시 사용한다.
- ElementType.TYPE : 클래스, 인터페이스, 이넘 선언 시 사용한다.
- ElementType.CONSTRUCTOR : 생성자 선언시 사용한다.
- ElementType.FIELD : 맴버 변수 선언 시 사용한다.
- ElementType.METHOD : 메소드 선언 시 사용한다.
- ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언 시 사용한다.
- ElementType.LOCAL_VARIABLE : 지역 변수 선언시 사용한다.
- ElementType.TYPE_PARAMETER : 매개 변수 타입 선언 시 사용한다.
ElementType 내부에 설명이 잘 되어있어서 읽으면 될 것 같다.
Documented: JavaDoc 생성 시 Document에 포함되도록 한다.
Inherited: 해당 어노테이션을 하위 클래스까지 적용한다.
'우아한테크코스 4기 > 프로젝트' 카테고리의 다른 글
캐시(1) Redis란? (5) | 2022.10.09 |
---|---|
공식팀의 테스트코드 최적화 with 테스트 격리 (0) | 2022.10.08 |
HTTP1.0 과 HTTP1.1 과 HTTP2 그리고 QUIC (2) | 2022.09.08 |
토큰과 세션(3) - 선택 (0) | 2022.08.29 |
토큰과 세션(2) - 세션기반 인증 확장 방법 (2) | 2022.08.27 |