2006/07/31 23:54 Developer
org.springframework.test.AbstractDependencyInjectionSpringContextTests 테스트클래스 만들때 유용함
spring을 사용해서 application을 구현하는 사람이라면, 테스트하기 좋은 구조로 코딩을 할수 있다는 것을 알것이다. 하지만, test코드를 작성할때 어쩔수 없는 dependency lookup과정이나 wiring을 코드 안에 넣어서 테스트를 하는 사람이 많다. spring에서 제공하는 API를 이용한다고 가정을 하면, DI를 아래와 같이 손쉽게 할수 있다.
org.springframework.test.AbstractDependencyInjectionSpringContextTests를 이용해서 TestCase를 작성하면 테스트케이스 안에서도 lookup이 아닌 DI를 이용해서 테스트를 작성할 수가 있다.
DAO를 테스트할때 실제로 DB에 값이 들어가서 단위테스트를 작성하는데 어려움이 있다. 아래와 같은 API를 사용하면 테스트를 마친후 모든 데이터를 rollback을 해준다.
org.springframework.test.AbstractTransactionalSpringContextTests
TestCase에 AbstractDependencyInjectionSpringContextTests나 AbstractTransactionalSpringContextTests을 상속을 받으면 다음과 같은 부분을 오버라이딩해서 XML설정파일의 위치를 적어주면 실행시에 자동으로 DI가 된다.
하지만, proxy나 decorator패턴과 같이 같은 인터페이스를 구현해야 하는 클래스가 있다면, 설정을 바꾸어 줘야 한다. config에 상관없이 default값이 type으로 되어 있어서, 아래와 같이 수동으로 wiring타입을 정의를 해주면 원하는 DI를 할수가 있다. 계속 오리지날 파일이 잘못된지 알고 삽질을 했슴...^^
인터페이스 기반으로 코드를 작성하면 테스트가 정말 쉬워진다. 테스트를 많이 한 만큼 더 좋은 품질의 코드를 작성할 수 있는 것은 두말하면 잔소리다.
7월 31일 추가
Spring이 제공하는 테스트 유틸리티 클래스
http://blog.empas.com/ahnyounghoe/15000004
org.springframework.test.AbstractDependencyInjectionSpringContextTests를 이용해서 TestCase를 작성하면 테스트케이스 안에서도 lookup이 아닌 DI를 이용해서 테스트를 작성할 수가 있다.
DAO를 테스트할때 실제로 DB에 값이 들어가서 단위테스트를 작성하는데 어려움이 있다. 아래와 같은 API를 사용하면 테스트를 마친후 모든 데이터를 rollback을 해준다.
org.springframework.test.AbstractTransactionalSpringContextTests
TestCase에 AbstractDependencyInjectionSpringContextTests나 AbstractTransactionalSpringContextTests을 상속을 받으면 다음과 같은 부분을 오버라이딩해서 XML설정파일의 위치를 적어주면 실행시에 자동으로 DI가 된다.
@Override
protected String[] getConfigLocations() {
return new String[] { "classpath:test/applicationContext-NOTECOMMON.xml","classpath:test/applicationContext-NOTEBBS.xml"};
}
protected String[] getConfigLocations() {
return new String[] { "classpath:test/applicationContext-NOTECOMMON.xml","classpath:test/applicationContext-NOTEBBS.xml"};
}
하지만, proxy나 decorator패턴과 같이 같은 인터페이스를 구현해야 하는 클래스가 있다면, 설정을 바꾸어 줘야 한다. config에 상관없이 default값이 type으로 되어 있어서, 아래와 같이 수동으로 wiring타입을 정의를 해주면 원하는 DI를 할수가 있다. 계속 오리지날 파일이 잘못된지 알고 삽질을 했슴...^^
@Override
protected String[] getConfigLocations() {
this.setAutowireMode(AUTOWIRE_BY_NAME);
return new String[] { "classpath:test/applicationContext-NOTECOMMON.xml","classpath:test/applicationContext-NOTEBBS.xml"};
}
protected String[] getConfigLocations() {
this.setAutowireMode(AUTOWIRE_BY_NAME);
return new String[] { "classpath:test/applicationContext-NOTECOMMON.xml","classpath:test/applicationContext-NOTEBBS.xml"};
}
인터페이스 기반으로 코드를 작성하면 테스트가 정말 쉬워진다. 테스트를 많이 한 만큼 더 좋은 품질의 코드를 작성할 수 있는 것은 두말하면 잔소리다.
7월 31일 추가
Spring이 제공하는 테스트 유틸리티 클래스
http://blog.empas.com/ahnyounghoe/15000004