Spring Core/자질구래

[spring]junit 과 spring legacy project 연동 시키기

  • -

자바에서 애플리케이션 작성을 위한 Spring Framework와 단위테스트를 위한 JUnit을 연동해서 사용하는 방법에 대해 살펴보자.

 

테스트를 위해서는 junit과 spring-test에 대한 의존성 설정이 필요하다.

<!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${org.springframework-version}</version> <scope>test</scope> </dependency>

 

 

@RunWith는 JUnit이 동작할 때 내장된 runner가 아닌 사용자 지정의 runner와 동작 할 수 있게 지정해주는 녀석이다. 이 부분이 바로 spring framework와의 연동 부분이 된다.

@RunWith(SpringRunner.class)

이때 사용할 runner는 SpringRunner.class이다.

다음으로 스프링 프레임워크에서 읽어들일 설정 파일을 등록해주어야 한다. 이때 @ContextConfiguration을 사용한다.

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface ContextConfiguration { @AliasFor("locations") String[] value() default {}; @AliasFor("value") String[] locations() default {}; Class<?>[] classes() default {}; Class<? extends ApplicationContextInitializer<?>>[] initializers() default {}; boolean inheritLocations() default true; boolean inheritInitializers() default true; Class<? extends ContextLoader> loader() default ContextLoader.class; String name() default ""; }

annotation의 여러가지 속성 중 가장 많이 사용되는 것은 설정 파일의 위치를 지정하는 locations이다. locations에 그냥 경로를 입력하면 클래스 패스 경로상에 있는 xml 파일을 로딩하고 만약 프로젝트에는 있지만 클래스 패스에는 없는 경우(예를 들어 webapp/WEB-INF/ 등에 있는 경우)는 file:을 통해서 접근해야 한다.

@ContextConfiguration({"/classpath-context.xml", "file:src/main/webapp/WEB-INF/spring/root-context.xml"})

만약 java 기반의 환경 설정을 사용한다면 classes 속성을 이용해서 로딩한다.

@ContextConfiguration(classes = MyApplicationContext.class)

자바 기반으로 작성하면 자동완성도 지원되기 때문에 오타의 위험도 없고 역시 깔끔하다.

 

연결이 되었다면 이제부터는 일반적인 JUnit 처럼 사용하면 된다.

import static org.junit.Assert.assertNotNull; import javax.sql.DataSource; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; // 1. spring과 junit을 연동시키자. @RunWith(SpringRunner.class) // 2. 환경 설정을 어디서 가져올까요? @ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml") public class BeanTest { @Autowired ApplicationContext ctx; @Autowired DataSource ds; @Test public void beanTest() { assertNotNull(ctx); assertNotNull(ds); } }

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.