Please Enable JavaScript!
Gon[ Enable JavaScript ]

(5) HSQLDB 과 Spring framework - DBUnit 테스트 환경을 만들어 본다.

자바(JAVA)
반응형

이제 HSQLDB 테스트 환경을 다 만들었으니 DBUint 를 사용해 단위테스트를 해본다.

먼저 AbstractTransactionalDataSourceSpringContextTests 상속받아서
클래스를 하나 만든다.

이것은 abstract class AbstractSingleSpringContextTests 추상클래스에 있으며 이것의 기능은

소스의 내용을 보면알겠지만 설정내용이 저장된 xml 파일 경로를 배열로 넘겨줘야한다.

새로 만든클래스에서 이 함수를 상속받아 xml 경로 정보를 넘기지 않으면 null 만 넘어가게

되어있어 제대로 동작하지 않으므로 재구성한것이다.


protected String[] getConfigLocations()
{
   String paths[] = getConfigPaths();
   String locations[] = new String[paths.length];
   for(int i = 0; i < paths.length; i++)
   {
      String path = paths[i];
      if(path.startsWith("/"))
         locations[i] = "classpath:" + path;
      else
         locations[i] = "classpath:" + StringUtils.cleanPath(ClassUtils.classPackageAsResourcePath(getClass()) + "/" + path);
   }
   return locations;
}
새로 만든클래스에 getConfigLocations() 구현한 함수이다. 여기에 필요한 설정정보 xml 을 배열로 넘기면 된다. classpath : WEB-INF/classes 경로로 컴파일된 소스의 위치를 말한다. 이 위치에 test-context.xml 을 위치 시키면된다
protected String[] getConfigLocations(){
	String[] path = new String[] {"classpath:test-context.xml"};
	return path;
}
그리고 DAO 클래스를 set 한다
private ProductDAO productDAO;

public void setProductDao(ProductDAO productDAO){
	this.productDAO = productDAO;
}

DAO 클래스는 스프링의 JdbcDaoSupport 상속받아 DAO 공통 클래스 하나 만든다.

이 클래스에 dataSource 를 넘겨주면된다. 그러면 DB 연결설정이 된다
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;

public class CommSpringHSQLDAO extends JdbcDaoSupport {
  private DataFieldMaxValueIncrementer incrementer;
  
  public void setIncrementer(DataFieldMaxValueIncrementer incrementer){
	this.incrementer = incrementer;
  }
  protected final DataFieldMaxValueIncrementer getIncrementer(){
	return incrementer;
  }
}

위 클래스를 상속받아 DAO 클래스 만든다. 그리고 getJdbcTemplate() 함수를 사용하여

원하는 DB 처리한다
import org.springframework.dao.DataAccessException;
public class ProductDAO extends CommSpringHSQLDAO{
   public List getProductList(){
      List products = null;
      try {
	  products = getJdbcTemplate().queryForList("select * from PRODUCT");
      } catch (DataAccessException e) {
	 e.printStackTrace();
      }
      return products;
   }
}
아래는 DBUnit 전체 소스 내용이다
public class HSQLDBUnitTest extends
		AbstractTransactionalDataSourceSpringContextTests {
	
	private ProductDAO productDAO;
	
	public void setProductDao(ProductDAO productDAO){
		this.productDAO = productDAO;
	}
	/* (non-Javadoc)
	 * @see org.springframework.test.AbstractSingleSpringContextTests#getConfigLocations()
	 */
	protected String[] getConfigLocations(){
		String[] path = new String[] {"classpath:test-context.xml"};
		return path;
	}
	
	public void testGetProductList(){
		List products = productDAO.getProductList();
		for (int i=0; i < products.size(); i++){
			Map temp = (Map)products.get(i);
			Iterator iter = temp.keySet().iterator();
			while (iter.hasNext()){
				String key = iter.next().toString();
				System.out.println(key + " : " + temp.get(key));
			}
		}
	}
}

이제 test-context.xml 설정값에 대한 내용이다. 여기에는 jdbc.properties 에서 설정한 아이디,

패스워드,driver, url 을 불러와서 셋팅한다. 그 부분은 <bean id=”propertyConfigurer”  에서

어떤  경로에 파일을 쓸것지 셋팅한다
  

	
		
	
		
		
	   	
	   	
	   	
	   	
	   	
    
    
    
    	
    
    
    
    
    	
    
    
    
    	
    		
    			classpath:jdbc.properties
    		
    	
    
    
    
    
    	
    


jdbc.properties 의 내용이다.

jdbc.driverClassName=org.hsqldb.jdbcDriver

jdbc.url=jdbc:hsqldb:hsql:@localhost:9002

jdbc.username=sa

jdbc.password=

반응형
Posted by 녹두장군1
,