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을 이용해서 번거로움을 줄일 수 있다.
- context.xml
beans 엘리먼트의 속성으로 네임스페이스들을 등록하고
beans 하위에
<context:component-scan base-package="대상패키지"/> 요소를 입력한다. - Test 클래스에서 해당 객체를 @Autowired로 마킹한다.
장점은 (1)context.xml에 테스트에 필요한 클래스들을 등록할 필요가 없고, (2)DI가 발생하는 클래스에서 setter 메소드를 생성하지 않아도 된다.
ex)
- 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> - 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());
}
}