본문 바로가기
Spring/Spring Legacy

Spring Legacy / 단위 테스트하는 방법

by LWM 2020. 7. 29.
반응형

개발자들은 프로젝트에서 수많은 테스트를 거쳐 서비스를 릴리즈하게된다. 그만큼 테스트는 프로젝트 진행에 있어서 중요한 요소이며, 이러한 테스트를 수행하는 방법을 알아야 질 높은 프로젝트를 완성할 수 있다. 그럼 테스트 코드는 어떻게 짜여질까? 아래 예제를 통해 살펴보자.

 

 

다음 코드는 'src/test/java' 폴더에 작성된 단위 테스트 목적의 자바파일이다. 보통 테스트 자바파일은 'src/test/java' 디렉토리에 셋팅되며 아래와 같은 코드구성으로 테스트가 이루어진다.

package org.zerock.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)
//XML버전
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
//Java버전
@ContextConfiguration(classes={RootConfig.class})
@Log4j
public class SampleTests {

	@Setter(onMethod_ = {@Autowired})
	private Restaurant restaurant;
	
	@Test
	public void testExist() {
		
		assertNotNull(restaurant);
		
		
		log.info(restaurant);
		log.info("--------------------");
		log.info(restaurant.getChef());
	}
}

 코드를 보니 낯선어노테이션이 몇개 보이는데 각각의 어노테이션들의 위치를 잘 기억하면서 하나씩 살펴보기로하자.

 

!잠깐

단위 테스트는 spring-test 모듈을 활용하여 간단하게 스프링을 가동시켜 스프링이 동작되게 한다. Junit은 4.10 이상의 버전을 이용해야한다.

 

  • @Runwith

    현재 테스트 코드가 스프링을 실행하는 역할을 할 것이라는 것을 의미한다. 소괄호안에는 SpringJUnit4ClassRunner.class가 작성된다.
  • @ContextConfiguration

    단위 테스트에서 가장 중요한 어노테이션으로 속성값이 매우 중요하다. @ContextConfiguration은 지정된 클래스나 문자열을 통해 필요한 객체들을 스프링 내에 객체로 등록하게 된다. 이것을 흔히 스프링의 빈으로 등록된다고 표현하며, @ContextConfiguration에 사용하는 문자열은 XML의 경우 'classpath : ' 또는 'file : ' 을 이용할 수 있으므로 툴에서 자동생성된 root-context.xml의 경로를 지정 할 수 있고 Java의 경우 'classes' 를 이용해 root-context.xml의 역할을 대신하는 RootConfig경로를 지정할 수 있다.

  •  @Log4j

    Lombok을 이용해 로그를 기록하는 Logger를 변수로 생성한다. 별도의 Logger객체의 선언 없이도 Log4j 라이브러리와 설정이 존재한다면 바로 사용가능하며, 'Spring Legacy Project'로 생성하는 경우 기본으로 Log4j와 해당 설정이 완료되는 상태이기 때문에 별도의 처리 없이 사용 가능하다. 로그에 대한 설정은 'src/main/resources'와 'src/test/resources'에 별도로 존재한다.

  • @Test

    JUnit에서 테스트 대상을 표시하는 어노테이션이며, 해당 메서드를 선택하고 JUnit Test기능을 실행한다.

-참고-

assertNotNull()

assertNotNull()은 보통 매개값이 포함되어 있는데 해당 의미는 매개변수가 null이 아니어야만 테스트가 성공한다는 것을 뜻한다.

 

!참고

만약 테스트가 실행되지 않는다면 JUnit 버전을 재확인하고, spring-test 라이브러리가 포함되어 있는지 확인하자.

반응형