스프링 프레임워크(Spring framework) 테스트 코드 사용하기
1. 테스트 코드 정의
프로젝트 내 src/test/java 폴더 내에 com.project.sample.SampleTests 클래스를 추가합니다.
테스트는 spring-text 모듈을 이용해서 간단하게 스프링을 가동시킵니다. 이때 Junit은 4.10 이상의 버전을 사용해야 합니다.
pom.xml에서 버전 확인 | Maven Dependencies에서 버전 확인
SampleTests 클래스 정의
SampleTests 클래스 설명
1. 테스트 코드는 우선 현재 테스트 코드가 스프링을 실행하는 역할을 할 것이라는 것을 @Runwith 어노테이션으로 표시합니다.
2. @ContextConfiguration은 지정된 클래스나 문자열을 이용해서 필요한 객체들을 스프링 내에 객체로 등록하게 됩니다. 스프링 빈으로 등록하는 것입니다. @ContextConfiguration에 사용하는 문자열은 'classpath:'나 'file:'을 이용할 수 있으므로, 이클립스에서 자동으로 생성된 root-context.xml의 경로를 지정할 수 있습니다.
3. Log4j는 Lombok을 이용해서 로그를 기록하는 Lorgger를 변수로 생성합니다. 별도의 Logger 객체의 선언 없이 Log4j 라이브러리와 설정이 존재하면 바로 사용할 수 있습니다. Spring Legacy Project로 생성하는 경우 Log4j의 해당 설정이 완료된 상태이기 때문에 별도 처리 없이 사용이 가능합니다.
+ 로그에 대한 설정은 'src/main/resources'와 'src/test/resources'에 존재합니다.
4. @Autowired는 지난 블로그를 참고하시면 설명되어 있습니다. 스프링이 관리하고 있는 객체를 주입합니다.
5. @Test는 JUnit의 테스트 대상을 표시하는 어노테이션입니다. 해당 메서드를 선택하고 JUnit Test 기능을 실행합니다.
assertNotNull()은 restaurant 변수가 null이 아니어야만 테스트가 성공한다는 것을 의미합니다.
테스트 작업은 프로젝트 초기에 설정해 두고 사용하는 습관을 갖는 것이 좋습니다.
2. 테스트 실행
1) Run As > Junit Test 를 실행
※프로젝트에서 Junit을 제대로 인식하지 못 할 경우에 Junit initializationError가 발생하는데,
Project 우클릭 -> Build Path -> Add Library -> JUnit 선택 Next -> version 선택, Finish 하여 해결할 수 있습니다.
2) 테스트 실행 결과
실행 결과에서 주목해야 할 부분은 다음과 같습니다.
* new Restaurant() 와 같이 Restaurant 클래스 객체를 생성하지 않았는데도 객체가 만들어졌다는 점. 즉, 스프링이 객체(Bean)를 어노테이션 등을 이용해서 객체를 생성하고 관리하는 일종의 '컨테이너'나 '팩토리' 기능을 갖고 있습니다.
* Restaurant 클래스의 @Data 어노테이션으로 Lombok을 이용해서 여러 메서드가 만들어진 점. Lombok은 자동으로 getter/setter 등을 만들어 주는데 스프링은 생성자 주입 혹은 setter 주입을 이용해서 동작합니다. Lombok을 통해서 getter/setter 등을 자동으로 생성하고, 'onMethod' 속성을 이용해서 작성된 setter에 @Autowired 어노테이션을 추가합니다.
* Restaurant 객체의 Chef 인스턴스 변수(멤버 변수)에 Chef 타입의 객체가 주입되어 있다는 점. 스프링은 @Autowired와 같은 어노테이션을 이용해서 개발자가 직접 객체들과의 관계를 관리하지 않고 자동으로 관리되도록 합니다.
※ 테스트 코드가 실행되기 위해 스프링 프레임워크가 동작했고, 동작 과정에서 필요한 객체들이 스프링에 등록되었고, 의존성 주입이 필요한 객체는 자동으로 주입된 내용을 정리해둘 필요가 있습니다.
JAVA Configuration을 한 경우의 테스트
Java configuration으로 진행했을 경우도 테스트 코드는 정상적으로 작동한 것을 확인할 수 있습니다.
다만 위 WARNING이 생겼는데요. 해당 메시지 발생 원인을 확인해보니 jdk 버전과 스프링 버전에 있어서 발생하는 문제로 확인이 됩니다. WARNING 메시지에 대한 관련 내용이 담긴 링크는 댓글에 남겨두겠습니다.
좋아요, 구독, 광고 클릭은 큰 힘이 됩니다. : )
'java, spring' 카테고리의 다른 글
스프링 프레임워크 @AllArgsConstructor, @RequiredArgsConstructor Annotation (0) | 2021.05.08 |
---|---|
Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 Warning Message 해결 (0) | 2021.05.08 |
스프링 프레임워크가 root-context.xml 읽어 들이는 순서 (0) | 2021.05.08 |
스프링 프로젝트에 Lombok 적용과 의존성 주입(DI) 확인하기 (1) | 2021.05.05 |
스프링 웹 프로젝트를 Java Configuration 으로 설정하기 (0) | 2021.05.05 |