의존성 주입 테스트

2019. 2. 7. 17:09Spring

의존성 주입의 동작 과정

Spring-context : 스프링이 사용하는 메모리 영역
                    ApplicationContext라는 이름의 객체가 만들어진다.

root-context : 스프링 프레임워크에서 객체를 생성하고 관리하는 객체들(Bean)에 대한 설정
                 <context: component-scan> 태그 이용하여 패키지 스캔
                  @Component라는 어노테이션이 존재하는 클래스의 인스턴스 생성.



Test2 객체 생성, Test1 객체를 주입 예제
  • 스프링에서는 생성자를 이용한 주입, setter 메서드를 이용한 주입으로 의존성 주입을 구현
 
1) pom.xml 설정 
- Lombok 라이브러리 추가(Lombok 이용하여 setter 메서드 자동 구현)

- spring-test 라이브러리 추가
 

- junit 라이브러리 버전 변경
※ 스프링 4.x 이상의 버전을 테스트할 경우 junit 4.10 버전 이상 필요



2). root-context.xml 수정
※ root-context.xml의 Namespaces 탭에서 context 항목 체크



3) Test Class 생성

- Test1 Class

- Test2 Class
  • @Component라는 어노테이션이 존재하는 클래스 인스턴스 생성(Test1, Test2)
  • Test2의 Test1 객체가 필요하다는 @Autowired 어노테이션 설정이 있으므로, 스프링은 Test1 객체의 레퍼런스를 Test2 객체에 주입.


4) 테스트 코드
 

- SampleTest class
 
  • @RunWith 어노테이션 설정으로 통해 테스트 코드가 스프링을 실행하는 역할을 함
  • @ContextConfiguration 어노테이션션은 지정된 클래스나 문자열을 이용해서 필요한 객체들을 스프링 내에 객체로 등록하게 함.
    스프링의 Bean 으로 등록
    'classpath:,' file:' 을 이용. 이클립스에 자동으로 생성된 root-context.xml의 경로 지정을 할 수 있다.
  • Log4j는 Lombok을 이용해서 로그를 기록하는 Logger 변수 생성.
    Spring Legacy Project로 생성하는 경우 기본으로 Logger 객체의 선언 없이 src/main/resource, src/test/resources에 Log4 라이브러리가 존재하여 별도의 처리 필요 없음.
  • @Auowired 어노테이션은 해당 인스턴스 변수가 스프링으로 부터 자동으로 주입해 달라는 의미
  • @Test 어노테이션은 JUnit에서 테스트 대상을 표시



※ 사용된 어노테이션 종류
1) Lombok  : 컴파일 시 코드를 작성하는 기능을 도와주는 라이브러리
  • @Data : @ToString, @EqualAndHashCode, @Getter/Setter, @RequriedArgsConsructor를 결합한 형태
  • @Log4j : 로그 객체를 생성
  • @Setter : setter 메서드를 만들어주는 역할
    • 속성
    1. value : 접근 제한 속성을 의미         
                 기본값 : lombok.AccessLevel.PUBLIC
    2. onMethod : setter 메서드 생성 시 메서드에 추가할 어노테이션 지정
                    ※ JDK 버전
                     1.7 표기 : @Setter(onMethod = @_({Autowired})
                     1.8 표기 : @Setter(onMethod_ = {@Autowired})
    3. onParam : setter 메서드의 파라미터에 어노테이션을 사용하는 경우 사용.
2) 스프링 관련
@Component : 해당 클래스가 스프링에서 객체로 만들어서 관리하는 대상을 의미
                  클래스들을 객체로 생성해서 빈(Bean)으로 관리
@Autowired : 스프링 내부에서 자신에게 해당 타입의 빈(Bean)을 주입하라는 의미

3) 테스트관련
@ContextConfiguration : 스프링이 실행되면 어떤 설정 정보를 읽어 들어야하는지 명시
                             1) locations 이용해서 문자열의 배열로 XML 설정을 명시 방법
                             2) classes 속성으로 @Configuration이 지정된 클래스를 지정 방법
@RunWith : 테스트 시 필요한 클래스를 지정, 스프링은 SpringJUnit4ClassRunner 클래스가 대상
@Test : jUnit에서 해당 메서드가 jUnit 상에서 단위 테스트의 대상인지 의미


참고 : 코드로 배우는 스프링 웹프로젝트 개정판


'Spring' 카테고리의 다른 글

스프링의 특징과 의존성 주입  (0) 2019.02.07
개발환경  (0) 2019.02.07