testAdd() 메소드를 만들고 회원 목록을 추가하는 기능을 추가합니다.

public void testAdd() {

       Member member = createMember();
       mr.add(member);
       assertEquals(1, mr.getNumberOfMembers());
}

createMember() 메소드에서 Member 객체를 받아온 뒤 MeberRepository 타입의 변수 mr의 add(Member member) 메소드를 통해서 DB에 Member 객체의 data를 넣어줍니다. 그리고 DB에 정말 들어갔는지 DB에 들어있는 Member Data의 수를 getNumberOfMembers() 메소드를 사용해서 확인합니다.

이 test 클래스에서 두 개의 메소드에 대한 test를 하게 되는 거나 마찬가지기 때문에 별로 test 메소드가 좋아보이지는 않지만 일단 개발을 하고 나중에 리팩토링을 하도록 하겠습니다. 헤헤헷; 일단 getNumberOfMembers() 메소드를 사용하는 부분은 주석처리를 하고 add() 부터 구현합니다.

개발 되는 순서

  1. MemberRepository 인터페이스에 void add(Member member); 이렇게 한 줄을 추가합니다.
  2. MemberRepositoryImple 클래스에 void add(Member member) { memberDao.add(member); } 이렇게 구현합니다.
  3. MemberDao 인터페이스에 void add(Member member); 이렇게 한 줄을 추가합니다.
  4. SqlmapMembeDao 클래스에 void add(Member member){ getSqlMapClientTemplate().insert("Member.insert", newMember); } 이렇게 추가합니다.
  5. 여기서 test를 한번 해보면...
  6. Member.xml에서 insert라는 id를 찾을 수 없기 때문에 에러가 발생합니다.
  7. Member.xml에 다음과 같이 sql문을 추가합니다.                                                                 <insert id="insert" parameterClass="member">
           INSERT INTO Member(name, email
           <isNotNull property="messengerId">, messengerId</isNotNull>
           <isNotNull property="phone">, phone</isNotNull>
           <isNotNull property="blugAddress">, blugAddress </isNotNull>)
           VALUES(#name#, #email#
           <isNotNull property="messengerId">, #messengerId#</isNotNull>
           <isNotNull property="phone">, #phone#</isNotNull>
           <isNotNull property="blugAddress">, #blugAddress#</isNotNull>);
       </insert>

이제 주석처리 했던 부분을 제거하고 getNumberOfMembers() 이 메소드도 위의 순서대로 개발을 합니다.

add()를 해도 AbstractTransactionalDataSourceSpringContextTests 이 클래스의 특성상 롤백이 되기 때문에 test가 끝나고 DB에 데이터는 저장되어 있지 않습니다.

관련글 :테스트 코드에서의 중복 제거 작업