Spring

스프링 - JUnit을 이용한 스프링 테스트

마루설아 2025. 5. 18. 13:39

Junit

스프링의 단위 테스트 수행을 위한 프레임워크

 

 

src/main/java

src/test/java

아래처럼 패키지 및 자바 클래스 생성

 

 

pom.xml에 아래 코드 추가

(Junit은 4.10 이상의 버전 사용 필요)

...

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${org.springframework-version}</version>
    </dependency>
    
...

 

 

Chef.java 파일 작성

package com.myspring.sample;

import org.springframework.stereotype.Component;

import lombok.Data;

@Component // 스프링에게 해당 클래스가 스프링에서 관리해야 하는 대상
@Data // getter, setter, toString 등 포함
public class Chef {
	
}

 

 

Restaurant.java 파일 작성

package com.myspring.sample;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import lombok.Data;
import lombok.Setter;

@Component // 스프링에게 해당 클래스가 스프링에서 관리해야 하는 대상
@Data // getter, setter, toString 등 포함
public class Restaurant {
	
	@Setter(onMethod_ = @Autowired) // 자동으로 setChef() 컴파일 시 생성
	private Chef chef;
}

 

 

SampleTests.java 파일 작성

package com.myspring.sample;

import static org.junit.Assert.assertNotNull;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class) // 이 Test 코드가 스프링 실행 역할임을 알려준다
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml") // 스프링 Beans(객체)로 등록 
@Log4j // 로그 기록용
public class SampleTests {
	
	// Autowired : 인스턴스 변수를 스프링으로부터 자동 주입
	@Setter(onMethod_ = { @Autowired })
	private Restaurant restaurant;
	
	@Test // 테스트 대상 표시
	public void testExist() {
		assertNotNull(restaurant); // restaurant 변수가 null이 아니어야만 테스트 성공
		
		log.info(restaurant);
		log.info("--------------------------");
		log.info(restaurant.getChef());
	}
}

 

 

프로젝트 우클릭 > Run As > JUnit Test

이후 Console창에서 아래 로그를 확인할 수 있다.

 

 

확인할 수 있는 부분

1. new Restaurant()와 같은 객체 생성자가 없어도 객체 생성이 됨

 > 스프링은 관리가 필요한 Beans(객체)를 어노테이션을 이용해 객체 생성 및 관리를 해주는 컨테이너/팩토리 기능이 있다.

2. @Data 어노테이션으로 Lombok 이용, 이후 여러 메서드 생성

 > Lombok은 Setter, Getter등을 만들어주고, onMethod 속성을 이용하여 작성된 Setter에 @Autowired 어노테이션 추가

3. Resuaurant 객체의 Chef 인스턴스 변수에 Chef 타입의 객체가 주입

 > 스프링은 @Autowired 어노테이션을 이용해 객체를 직접 관리하지 않고 자동으로 관리되도록 한다.