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
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 58 | 톰캣에서 로그 파일 저장시 ansi 로 저장되는 현상 | 황제낙엽 | 2024.10.21 | 665 |
| 57 |
Jsoup 을 이용하여 웹 크롤링(Web Crawling)
| 황제낙엽 | 2023.08.09 | 496 |
| 56 | Apache Log4j™ 2 사용하기 | 황제낙엽 | 2023.04.28 | 594 |
| 55 | Migrating from Log4j 1.x to 2.x | 황제낙엽 | 2023.04.28 | 718 |
| 54 |
SLF4J 를 사용해야 하는 이유
| 황제낙엽 | 2022.09.17 | 584 |
| 53 | Apache Log4j 2 Configuration 파일 설정 | 황제낙엽 | 2020.04.01 | 818 |
| 52 |
이클립스에서 JUnit 사용하기
| 황제낙엽 | 2019.04.02 | 728 |
| 51 | 각 레벨별 출력파일 설정 예제 | 황제낙엽 | 2018.09.18 | 775 |
| 50 |
log4j-1.2.15.jar 와 log4j.properties 예제
| 황제낙엽 | 2017.08.04 | 840 |
| 49 |
POI HSSF, XSSF, SXSSF 성능 분석
| 황제낙엽 | 2013.11.05 | 2097 |
| 48 | POI-HSSF and POI-XSSF - Java API To Access Microsoft Excel Format Files | 황제낙엽 | 2013.11.05 | 1775 |
| 47 | Commons Logging과 Log4J | 황제낙엽 | 2013.03.07 | 733 |
| 46 |
Library & Properties 파일
| 황제낙엽 | 2011.12.23 | 981 |
| 45 |
Cell 의 wrap 설정 (텍스트 개행)
| 황제낙엽 | 2011.05.09 | 3610 |
| 44 |
XSSF Examples
| 황제낙엽 | 2011.05.04 | 816 |
| 43 | 병합된 셀의 스타일( border) 설정하기 | 황제낙엽 | 2011.05.03 | 2214 |
| 42 | 셀 크기 조정 (자동 크기 조정) | 황제낙엽 | 2011.05.03 | 8316 |
| 41 | 셀 병합 | 황제낙엽 | 2011.05.03 | 697 |
| 40 | WebSphere 에서 Log4j 사용하기 | 황제낙엽 | 2011.04.15 | 632 |
| 39 |
Map 사용 예제
| 황제낙엽 | 2010.10.17 | 622 |