1. 의존성 주입 테스트
https://tadaktadak-it.tistory.com/102
[Spring] 스프링 프레임워크의 특징
* 스프링 프레임워크의 특징 POJO 기반의 구성 의존성 주입(DI)을 통한 객체 간의 관계 구성 AOP 지원 편리한 MVC 구조 WAS에 종속적이지 않은 개발 환경 1. POJO(Plain Old Java Object) 기반의 구성 오래된 방
tadaktadak-it.tistory.com
- 전에 스프링 프레임워크의 특징에서 말했듯이 의존성 주입을 하기 위해서 두 가지의 방법이 필요하다.
- 첫번째는 setter를 이용하는 것이고, 두번째는 생성자를 이용해서 하는 것이다.
[시나리오]
- 호텔, 레스토랑 안에 셰프 객체를 주입하는 예제
- 생성자, setter 메소드를 이용한 주입으로 의존성 주입 구현
- 설정 방식은 XML이나 어노테이션을 이용해서 처리
- 주입을 하기 위해서는 bean을 사용 --> bean을 관리하는 root-context.xml을 사용
- root-context.xml에서는 어떤 패키지를 스캔해서 bean으로 사용할지를 적어놓는다.
- 하지만 각 클래스 안에도 @Component를 해줘야 스캔을 할 때 스프링이 어떤 클래스를 관리해야할 지를 알 수 있다.
- 생성자는 그냥 하면 되지만 setter로 주입하기 위해서는 @Setter(onMethod_ = @Autowired)로 해주면 된다.
* 우리가 만드는 클래스에 @Component를 달아주고 root-context.xml에 패키지를 스캔하도록 해야 스캔할 수 있다.
* 하지만 Mybatis나 Service등 root-context에 스캔하도록 해 놓아주고 @Service 를 달아주고 하면 거기에 @Component가 포함되어 있기 때문에 따로 어노테이션을 안해도 주입할 수 있게 된다.
2. 스프링 프레임워크 동작시 생기는 일
- 스프링 프레임워크가 시작되면서 먼저 스프링이 사용하는 메모리 영역을 만든다.
- 스프링 내부적으로 ApplicationContext라는 이름의 객체가 만들어진다.
- 스프링은 자신이 생성하고 관리해야 하는 객체들에 대한 설정을 알아야 하고 이 설정파일은 root-context.xml이라는 파일로 만들어져 있다.
- root-context.xml에 설정되어 있는 <context:component-scan> 태그의 내용을 통해서 com.koreait.sample 패키지를 스캔하기 시작한다.
- 해당 패키지에 있는 클래스들 중에서 스프링이 사용하는 @Component라는 어노테이션이 존재하는 클래스의 인스턴스를 생성한다.
- Restaurant 객체는 Chef 객체가 필요하다는 어노테이션(@Autowired) 설정이 있으므로 Chef 객체의 레퍼런스를 Restaurant 객체에 주입한다.
3. 테스트 환경(JUnit)
- 자바 프로그래밍 언어용 유닛 테스트 프레임워크
- 가장 많이 사용하는 테스트 환경
- 테스트 성공시 JUnit GUI 창에 녹색으로 표시 / 실패시 적색으로 표시
- 하나하나의 케이스 별로(단위로 나누어서) 테스트를 하는 단위 테스트 도구
(전체를 하는 것보다 메소드 하나하나를 테스트 하는 도구) - 테스트 환경에서 실행하기 위해서는 Run As 에서 JUnit Test를 실행시켜 줘야 함
4. 테스트 환경 구축
- 테스트 클래스 위쪽에 어노테이션 추가
- 스프링이 필요하면 무조건 필요
@RunWith(SpringJUnit4ClassRunner.class) - 내부에 테스트용 메소드 선언
내용은 로직으로 구현 - 테스트용 메소드 위에 어노테이션 추가
@Test
5. 의존성 주입 테스트 환경에서 구현
- @RunWith(SpringJUnit4ClassRunner.class) 로 Spring 테스트 클래스를 추가를 해줌
- @ContextConfiguration("") : 우리가 사용할 Context를 작성해주는 것
- 지금은 주입을 위해 bean 객체를 사용해야 해서 root-context.xml만 필요
- 웹이 필요하다면 servlet-context.xml도 필요
- 여러 개의 메소드가 있다 하더라도 @Test 가 쓰여져 있는 메소드만 테스트로 실행됨
- assertNotNull(obj) : obj가 비워져 있지 않다면 테스트로 통과로 검사하기 위해서 사용
- HotelTests 클래스 안에 @Setter(onMethod_ = @Autowired)로 의존성 주입이 될 수 있게 선언해 놓았고,
root-context.xml이 스캔을 해서 bean으로 사용할 수 있게 Hotel 클래스 안에 @Component를 선언해 줬기에 스프링에서 자동으로 주입으로 해준다. - 그래서 assertNotNull이 아무문제 없이 실행에 성공을 한 것이다.
- 아까 메소드 안에 log.info로 선언했기에 console창에 나오는 것이고, JUnit을 이용해 테스트를 성공했으므로 초록색으로 GUI가 뜨게 된다.
'웹개발 > Spring' 카테고리의 다른 글
[Spring] 스프링 프레임워크에서 MyBatis 사용 (0) | 2022.07.03 |
---|---|
[Spring] 스프링 프레임워크에서 DB 연결 (0) | 2022.07.01 |
[Spring] Lombok 라이브러리 (0) | 2022.07.01 |
[Spring] 스프링 프레임워크에서의 프로젝트 (0) | 2022.07.01 |
[Spring] 스프링 프레임워크의 특징 (0) | 2022.06.29 |