sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
extra_vars4 | |
extra_vars5 | |
extra_vars6 |
http://chanwook.tistory.com/333이번 주 테스트 발표를 맞이해서 Unitils를 테스트 해봤습니다^^.
Unitils는 JUnit(TestNG도 가능)기반 하에 사용할 수 있는, 테스트 작성과 실행, 관리를 편하게 하도록 도와주는 프레임워크입니다.
일단 첫 번째로 눈에 띄는 것은 설정 파일을 등록해주는 부분입니다.
AbstractTransactionalDataSourceSpringContextTests 을 사용할 때는 기본적으로 getConfigurations() 메소드를 오버라이드 해서 설정 파일을 등록해 줍니다.
하지만 Unitils를 사용할 경우 어노테이션을 사용해서 설정이 가능합니다.
일단 상속을 받는 클래스를 UnitilsJUnit4 class(JUnit3을 사용할 경우에는 UnitilsJUnit3)을 상속 받습니다. 그리고 @SpringApplicationContext 어노테이션을 통해서 설정 파일을 등록해줄 수 있습니다.
그 다음은 빈을 injection 하는 방법입니다.
일반적으로는 setter injection을 사용해서 빈을 참조해서 사용하는 방식을 씁니다.
이 경우 setter 메소드를 선언해주어야 합니다. 상당히 번거러운 작업입니다. 테스트를 위해서 메소드를 추가적으로 작성해야 하는 상황입니다. 멤버 변수의 갯수 자체가 증가하고, 테스트 케이스가 더 많아 지면 상당한 복잡성을 안겨주게 됩니다.
Unitils에서는 Autowiring을 사용해서, 또는 명시적으로 빈의 이름을 사용해서 빈에 대한 injection을 해줍니다. Unitils에서는 ByType, ByName 의 Autowiring을 사용하는 방법과 직접 이름을 사용해서 빈을 injection 해주는 방법을 제공합니다.
setter 메소드를 사용하지 않고도, 비에 injection을 주었습니다^^. 상당히 간결해 졌습니다.
이번에는 Unitils를 사용해서 쉽게 DBUnit을 사용하는 방법을 보겠습니다. DBUnit을 사요하면 엑셀이나 XML 형식으로 손 쉽게 테스트 데이터를 만들 수가 있습니다. Unitils는 DBUnit을 등록하는 방법을 매우 간단하게 해줍니다.
특정 메소드에서 특정 테스트 데이터가 필요한 경우, 메소드 레벨에 @DataSet 어노테이션을 사용하면 되겠습니다.
만약 클래스에서 전체저으로 필요하다면, 클래스위에 @DataSet 어노테이션을 사용할 수 있습니다.
이 기능 외에도 상당히 편리한 기능을 Unitils는 제공하고 있습니다. 더 자세한 내용은 홈페이지에 올라와 있는 CookBosk, Tutorial 등을 참조하시면 되겠습니다.
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"};
}
}
...
@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 { ... }
"classpath:testConfig/applicationContext-dao.xml"
})
public class SpringTestUnitils extends UnitilsJUnit4 { ... }
그 다음은 빈을 injection 하는 방법입니다.
일반적으로는 setter injection을 사용해서 빈을 참조해서 사용하는 방식을 씁니다.
private PathService pathService;
public void setPathService(PathService pathService) {
this.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;
@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());
}
@Test public void loadComponentWithDataSet(){
Button button = componentService.getButton(15L);
System.out.println("ButtonId : " + button.getId());
}
만약 클래스에서 전체저으로 필요하다면, 클래스위에 @DataSet 어노테이션을 사용할 수 있습니다.
이 기능 외에도 상당히 편리한 기능을 Unitils는 제공하고 있습니다. 더 자세한 내용은 홈페이지에 올라와 있는 CookBosk, Tutorial 등을 참조하시면 되겠습니다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
18 | POI HSSF 기능 가이드 -- 퀵·가이드 (영문) | 황제낙엽 | 2008.05.15 | 297 |
17 |
Comma Separated Values (CSV) - au.com.bytecode.opencsv
![]() | 황제낙엽 | 2007.01.23 | 857 |
16 | Comma Separated Values (CSV) - com.Ostermiller.util Java Utilities | 황제낙엽 | 2007.01.23 | 266 |
15 | 엑셀(Excel)문서 처리 패키지 | 황제낙엽 | 2007.01.22 | 1437 |
14 | JUnit 간단 정리 | 황제낙엽 | 2007.09.17 | 81 |
13 | JUnit 3.8에서 JUnit 4, TestNG 활용으로 | 황제낙엽 | 2007.09.17 | 421 |
12 | 이클립스에 JUnit Test 환경 설정하기 | 황제낙엽 | 2007.08.28 | 102 |
11 | log4j에서 여러파일에 로그남기기 | 황제낙엽 | 2007.09.04 | 61 |
» | Unitils 를 이용해 Spring Test의 편리성 획득하기 | 황제낙엽 | 2007.09.04 | 128 |
9 | Assertions : 비교 확인, 조건 확인, Null 확인 | 황제낙엽 | 2007.09.03 | 209 |
8 | JUnit 4로 뛰어들기 (한글) | 황제낙엽 | 2007.09.03 | 180 |
7 | Test-Driven Development by JUnit | 황제낙엽 | 2006.02.21 | 150 |
6 | jWebUnit 프레임웍으로 웹 애플리케이션 테스트를 간단하게 | 황제낙엽 | 2006.02.21 | 69 |
5 | [re] jWebUnit 프레임웍 로그인 테스트 예제 | 황제낙엽 | 2006.02.22 | 70 |
4 | jWebUnit 의 원조 HttpUnit | 황제낙엽 | 2006.02.23 | 70 |
3 | Junit 을 이용한 효율적인 단위 테스트 전략 | 황제낙엽 | 2007.01.30 | 368 |
2 | JUnit의 구조 | 황제낙엽 | 2007.07.25 | 88 |
1 | Log4j 웹에서 사용하기 | 황제낙엽 | 2007.05.13 | 95 |