Spring MVC 리팩토링 3
모하니?/Coding : 2007. 6. 22. 13:17
이전 글에서 Controller와 Service Layer를 단위 테스트 했습니다. 이번에는 DAO Layer를 단위(?) 테스트 하겠습니다.
이번에는 OASF를 사용하여 DBUnit과 spring-mock.jar에 있는 AbstractTransactionalDataSourceSpringContextTests 를 확장한 클래스를 사용하겠습니다. 토비님께서 만드셨는데 DBUnit 사용하기도 좋고 설정파일들의 위치를 특정 컨벤션만 지켜주면 알아서 읽어들입니다.
하지만 제가 테스트 하는 애플리케이션은 OSAF 설정파일들의 컨벤션을 알지 못했기 때문에;; 그냥 getConfigLocations 를 사용해서 필요한 설정 파일들과 테스트 DB를 사용하도록 합니다. 테스트 DB는 java 6에 내장되어 있는 HSQL을 사용합니다.
먼저 테스트용 데이터를 XML 형식으로 준비합니다.
다음 테스트를 작성합니다.
테스트가 통과 하도록 findByMail을 구현합니다.

단위 테스트가 끝났습니다. 이제 남은 건
1. Service Layer에서 통합테스트를 해보고
2. Controller Layer에서 통합테스트를 하면
테스트&구현이 끝이납니다. 그럼 톰캣 돌려서 돌려보면 끝이겠지만 지금도 어느정도 잘 돌아갈 것 같은 자신이 생긴 상태입니다. 나머지는 밥먹고..계속 합니다.
이번에는 OASF를 사용하여 DBUnit과 spring-mock.jar에 있는 AbstractTransactionalDataSourceSpringContextTests 를 확장한 클래스를 사용하겠습니다. 토비님께서 만드셨는데 DBUnit 사용하기도 좋고 설정파일들의 위치를 특정 컨벤션만 지켜주면 알아서 읽어들입니다.
하지만 제가 테스트 하는 애플리케이션은 OSAF 설정파일들의 컨벤션을 알지 못했기 때문에;; 그냥 getConfigLocations 를 사용해서 필요한 설정 파일들과 테스트 DB를 사용하도록 합니다. 테스트 DB는 java 6에 내장되어 있는 HSQL을 사용합니다.
먼저 테스트용 데이터를 XML 형식으로 준비합니다.
<dataset>
<member id="1" name="기선" mail="keesun@mail.com" mobile="111-1111-1111" job="BIT" springAtHome="dd" springAtWork="dd" springModules="dd" attendType="N" />
</dataset>
<member id="1" name="기선" mail="keesun@mail.com" mobile="111-1111-1111" job="BIT" springAtHome="dd" springAtWork="dd" springModules="dd" attendType="N" />
</dataset>
다음 테스트를 작성합니다.
public void testFindByMail() throws Exception {
insertFlatXmlDataSet("test/kr/co/springframework/member/dao/memberData.xml");
Member member = memberDao.findByMail("keesun@mail.com");
assertNotNull(member);
assertNull(memberDao.findByMail(""));
}
insertFlatXmlDataSet("test/kr/co/springframework/member/dao/memberData.xml");
Member member = memberDao.findByMail("keesun@mail.com");
assertNotNull(member);
assertNull(memberDao.findByMail(""));
}
테스트가 통과 하도록 findByMail을 구현합니다.
@SuppressWarnings("unchecked")
public Member findByMail(final String mail) {
List<Member> memberList = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException, SQLException {
Query q = s.createQuery("from Member m where m.mail = :mail")
.setParameter("mail", mail);
return q.list();
}
});
if(memberList.size() == 0)
return null;
else
return memberList.get(0);
}
public Member findByMail(final String mail) {
List<Member> memberList = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException, SQLException {
Query q = s.createQuery("from Member m where m.mail = :mail")
.setParameter("mail", mail);
return q.list();
}
});
if(memberList.size() == 0)
return null;
else
return memberList.get(0);
}
단위 테스트가 끝났습니다. 이제 남은 건
1. Service Layer에서 통합테스트를 해보고
2. Controller Layer에서 통합테스트를 하면
테스트&구현이 끝이납니다. 그럼 톰캣 돌려서 돌려보면 끝이겠지만 지금도 어느정도 잘 돌아갈 것 같은 자신이 생긴 상태입니다. 나머지는 밥먹고..계속 합니다.
'모하니? > Coding' 카테고리의 다른 글
SimpleFormAndMultiActionController 개발의 어려움 (0) | 2007.07.17 |
---|---|
SimpleFormAndMultiActionController 개발 구상 (0) | 2007.07.17 |
ServletRequestUtils 사용하기 (6) | 2007.07.10 |
DB 바꾸기(Hibernate 사용할 때) (0) | 2007.06.27 |
Spring MVC 리팩토링 4 (0) | 2007.06.22 |
Spring MVC 리팩토링 3 (0) | 2007.06.22 |
Spring MVC 리팩토링 2 (0) | 2007.06.22 |
Spring MVC 리팩토링 1 (0) | 2007.06.22 |
Seminar Helper v0.8 (0) | 2007.06.20 |
어떤 계층 순서대로 구현 하시나요? (0) | 2007.06.18 |
Clover 설치하기 (0) | 2007.06.18 |