sitelink1  
sitelink2  
sitelink3  
extra_vars4  
extra_vars5  
extra_vars6  
http://chanwook.tistory.com/333이번 주 테스트 발표를 맞이해서 Unitils를 테스트 해봤습니다^^.
Unitils는 JUnit(TestNG도 가능)기반 하에 사용할 수 있는, 테스트 작성과 실행, 관리를 편하게 하도록 도와주는 프레임워크입니다.

일단 첫 번째로 눈에 띄는 것은 설정 파일을 등록해주는 부분입니다.

AbstractTransactionalDataSourceSpringContextTests 을 사용할 때는 기본적으로 getConfigurations() 메소드를 오버라이드 해서 설정 파일을 등록해 줍니다.

public class BoardTest extends AbstractTransactionalDataSourceSpringContextTests{
    ...
    @Override
    protected String[] getConfigLocations() {
        return new String[]{"file:web/WEB-INF/spring/application/applicationContext-**.xml",
                "file:web/WEB-INF/spring/dao/daoContext-**.xml",
                "file:web/WEB-INF/spring/applicationContext-**.xml"};
    }
}

하지만 Unitils를 사용할 경우 어노테이션을 사용해서 설정이 가능합니다.
일단 상속을 받는 클래스를 UnitilsJUnit4 class(JUnit3을 사용할 경우에는 UnitilsJUnit3)을 상속 받습니다. 그리고 @SpringApplicationContext 어노테이션을 통해서 설정 파일을 등록해줄 수 있습니다.

@SpringApplicationContext({"classpath:testConfig/applicationContext-jdbc-datasource.xml",
    "classpath:testConfig/applicationContext-dao.xml"
})
public class SpringTestUnitils extends UnitilsJUnit4 { ... }

그 다음은 빈을 injection 하는 방법입니다.
일반적으로는 setter injection을 사용해서 빈을 참조해서 사용하는 방식을 씁니다.

private PathService pathService;

public void setPathService(PathService pathService) {
        this.pathService = pathService;
}

이 경우 setter 메소드를 선언해주어야 합니다. 상당히 번거러운 작업입니다. 테스트를 위해서 메소드를 추가적으로 작성해야 하는 상황입니다. 멤버 변수의 갯수 자체가 증가하고, 테스트 케이스가 더 많아 지면 상당한 복잡성을 안겨주게 됩니다.

Unitils에서는 Autowiring을 사용해서, 또는 명시적으로 빈의 이름을 사용해서 빈에 대한 injection을 해줍니다. Unitils에서는 ByType, ByName 의 Autowiring을 사용하는 방법과 직접 이름을 사용해서 빈을 injection 해주는 방법을 제공합니다.

1. ByType Autowiring
    @SpringBeanByType
    private PathService pathService;

2. ByName Autowiring
    @SpringBeanByName
   private ComponentService componentService;

3. 빈 이름으로 호출
    @SpringBean("buttonDao")
    private ButtonDao buttonDao;

setter 메소드를 사용하지 않고도, 비에 injection을 주었습니다^^. 상당히 간결해 졌습니다.

이번에는 Unitils를 사용해서 쉽게 DBUnit을 사용하는 방법을 보겠습니다. DBUnit을 사요하면 엑셀이나 XML 형식으로 손 쉽게 테스트 데이터를 만들 수가 있습니다. Unitils는 DBUnit을 등록하는 방법을 매우 간단하게 해줍니다.
특정 메소드에서 특정 테스트 데이터가 필요한 경우, 메소드 레벨에 @DataSet 어노테이션을 사용하면 되겠습니다.

    @DataSet("classpath:testConfig/testDataSet.xml")
    @Test public void loadComponentWithDataSet(){
        Button button = componentService.getButton(15L);
        System.out.println("ButtonId : " + button.getId());
    }

만약 클래스에서 전체저으로 필요하다면, 클래스위에 @DataSet 어노테이션을 사용할 수 있습니다.

이 기능 외에도 상당히 편리한 기능을 Unitils는 제공하고 있습니다. 더 자세한 내용은 홈페이지에 올라와 있는 CookBosk, Tutorial 등을 참조하시면 되겠습니다.