'BOX/팁'에 해당되는 글 15건

  1. 2011.04.08 component-scan을 이용한 스프링 테스트

component-scan을 이용한 스프링 테스트

BOX/팁 2011. 4. 8. 17:25 posted by semanticker

spring : 2.5.6
spring-test : 2.5.6
junit : 4.4 (4.5는 스프링 2.5.X와 문제가 발생하므로 절대 연동하지 말 것)

spring 2.5.6 하에서 @Resource, @Component, @Service 등과 같은 annotation을 이용하여 DI(@Autowired)가 발생시키는 객체들은 JUNIT 테스트에서 해당 내용이 자동으로 주입되지 않는다. 때문에 context를 구성하는 XML에 해당 객체를 등록하고 해당 객체를 사용하는 클래스에서 setter 메소드를 생성해줘야 하는 번거러움이 발생하게 된다. 이때 component-scan을 이용해서 번거로움을 줄일 수 있다.

  1. context.xml
    beans 엘리먼트의 속성으로 네임스페이스들을 등록하고
    beans 하위에
    <context:component-scan base-package="대상패키지"/> 요소를 입력한다.
  2. Test 클래스에서 해당 객체를 @Autowired로 마킹한다.

장점은 (1)context.xml에 테스트에 필요한 클래스들을 등록할 필요가 없고, (2)DI가 발생하는 클래스에서 setter 메소드를 생성하지 않아도 된다.

ex)

  1. context.xml

    <beans  default-autowire="no"
            default-lazy-init="false"
            default-dependency-check="none"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <context:component-scan
        base-package="test.package"/>   
    </beans>


  2. test

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations
            ={"classpath:applicationContext-jdbc.xml"})
    public class FTPProcessorTest
                   extends AbstractSingleSpringContextTests {
       
        @Autowired
        FTPProcessor ftpProcessorService;

        @Test
        public void recieve(){
            assertTrue(true);
            assertTrue(ftpProcessorService.recieve());
        }
    }