Whiteship's Note

5-4. DAO 테스트 만들기



1. test/src 소스 폴더에 keesun.messenger 패키지 안에 MessengerDaoTest 클래스를 생성합니다.
사용자 삽입 이미지
2. 이 클래스는 AbstractTransactionalDataSourceSpringContextDaoTest 이 클래스를 상속 받습니다. 이 클래스는 Spring에 있는 AbstractTransactionalDataSourceSpringContextTests 클래스를 상속하여 만들어진 클래스 입니다.

public class MessengerDaoTest extends AbstractTransactionalDataSourceSpringContextDaoTest{

 

3. 테스트 대상인 MessengerDao를 protected로 변수를 만들고 다음과 같이 bean이 생성됐는지 확인하는 테스트를 만듭니다.

       protected MessengerDao messengerDao;

 

       public void testValidBean(){

             assertNotNull(messengerDao);

       }


테스트는 실패 합니다. 이전 글에서 등록한 빈의 이름이 memberDao로 쓰였네요;; 오타입니다. messengerDao로 수정을 하고 다시 테스트를 하면 통과합니다.

4. Member 객체를 memberDao를 이용해서 DB에 집어 넣는 테스트를 해봅니다. 이 때 MessengerFixture라는 객체를 만들어서 넘겨주는 클래스를 만들어서 사용합니다.

       public void testModel(){

             Messenger m = MessengerFixture.getAMessenger();

             messengerDao.add(m);

             assertTrue(m.getMessengerId()>0);

       }

//MessengerFixture.java

public class MessengerFixture {

 

       public static Messenger getAMessenger() {

             return new Messenger();

       }

}


5. 하지만 이 때 에러가 발생하는데 이유는 필수 요소인(nullable=false) 필드들의 값을 입력하지 안았기 때문에 발생하게 됩니다. 따라서 다음과 같이 수정을 하면 테스트가 통과 합니다.

public void testModel(){

      Messenger m = MessengerFixture.getAMessenger("keesun", "skype");

      messengerDao.add(m);

      assertTrue(m.getMessengerId()>0);

}
//MessengerFixture.java

public static Messenger getAMessenger(String m_id, String m_type) {

     Messenger messenger = new Messenger();

     messenger.setM_id(m_id);

     messenger.setM_type(m_type);

     return messenger;

}

top

  1. Favicon of http://crosscutter.info BlogIcon 지훈 2007.01.11 18:49 PERM. MOD/DEL REPLY

    테스트는 실패 합니다. 이전 글에서 등록한 빈의 이름이 memberDao로 쓰였네요;; 오타입니다.
    -> 재밌게 잘 봤습니다.
    그런데 AbstractTransactionalDataSourceSpringContextDaoTest 무려 51자!
    A49T 라 하는건 어떨까요?

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2007.01.11 23:33 신고 PERM MOD/DEL

    재밌게 봐주셔서 감사합니다.
    하핫 A49T에 대한 제안에 찬성합니다. :)

Write a comment.