Spring MVC 리팩토링 3
이전 글에서 Controller와 Service Layer를 단위 테스트 했습니다. 이번에는 DAO 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에서 통합테스트를 하면
테스트&구현이 끝이납니다. 그럼 톰캣 돌려서 돌려보면 끝이겠지만 지금도 어느정도 잘 돌아갈 것 같은 자신이 생긴 상태입니다. 나머지는 밥먹고..계속 합니다.