본문 바로가기

Spring/토비의 스프링 3.1

2.2 UserDaoTest 개선


목차

  1. 2.2.1 테스트 검증의 자동화
  2. 2.2.2 테스트의 효율적인 수행과 결과 관리

2.2.1 테스트 검증의 자동화

add()에 전달한 User 오브젝트와 get()을 통해 가져와 User 오브젝트의 정보가 서로 일치하는가

  • 테스트 에러 : 테스트 진행 중 에러(Exception 등)가 발생
  • 테스트 실패 : 에러는 발생하지 않았지만, 결과값이 다를 때
  • '조회 성공'은 에러가 발생하지 않았음을 의미할 뿐 테스트의 실패 여부는 알 수 없음

수정한 UserDaoTest()

public static void main(String[] args) throws ClassNotFoundException, SQLException{
    // ...

    User user2 = dao.get(user.getId());

    if (!user.getName().equals(user2.getName())) {
        System.out.println("테스트 실패 (name)");
    } else if (!user.getPassword().equals(user2.getPassword())) {
        System.out.println("테스트 실패 (password)");
    } else {
        System.out.println(user.getId() + "조회 성공");
    }
}

마지막 테스트 메시지가 "조회 성공"이라고 나오는지 확인

테스트란 개발자가 마음 편하게 잠자리에 들 수 있게 해주는 것(켄트 백))

2.2.2 테스트의 효율적인 수행과 결과 관리

main() 메소드로 만든 테스트로서는 필요한 기능을 모두 갖추었지만 여전히 결과 확인을 눈으로 하여야 한다는 문제가 있다. 또한 테스트 메소드가 많아질 경우, 많은 테스트를 간단히 실행시킬 수 없으며 테스트 결과를 종합적으로 볼 수 없다는 문제가 있다.

JUnit : 개발자를 위한 자바의 테스팅 프레임워크

JUnit 테스트로 전환

  • JUnit 역시 프레임워크이므로 제어의 역전(IoC)이 적용된다.
  • main() 메소드가 필요없다.

테스트 메소드 전환

main() 메소드를 일반 메소드로 바꾸어야 한다.

  • 메소드는 public으로 선언되어야 한다.
  • 메소드에 @Test 에노테이션을 붙여주어야 한다.
public class UserDaoTest {
    // JUnit에게 테스트 메소드임을 알려줌
    @Test
    // JUnit 테스트 메소드는 반드시 public으로 선언되어야 함
    public void addAndGet() throws SQLException, ClassNotFoundException {
        ApplicationContext context = new GenericXmlApplicationContext("/applicationContext.xml");
        UserDao dao = context.getBean("userDao", UserDao.class);

        // ...
    }
}

검증 코드 전환

테스트 결과 검증코드를 if/else에서 JUnit이 제공하는 방법으로 전환

  • assertThat() 스태틱 메소드 이용
  • is() : 매처의 일종, equals()로 비교

UserDaoTest

public class UserDaoTest {
    // JUnit에게 테스트 메소드임을 알려줌
    @Test
    // JUnit 테스트 메소드는 반드시 public으로 선언되어야 함
    public void addAndGet() throws SQLException, ClassNotFoundException {
        ApplicationContext context = new GenericXmlApplicationContext("/applicationContext.xml");
        UserDao dao = context.getBean("userDao", UserDao.class);

        User user = new User();
        user.setId("whiteship");
        user.setName("백기선");
        user.setPassword("married");

        dao.add(user);

        System.out.println(user.getId() + "등록 성공");

        User user2 = dao.get(user.getId());

        assertThat(user2.getName(), is(user.getName()));
        assertThat(user2.getPassword(), is(user.getPassword()));
    }
}

추가할 라이브러리 : junit
자바 유료화 관련하여 maven에서 받지 못하는 라이브러리가 있는 것으로 보임. Missing artifact 오류가 지속적으로 발생하여, com.springsource.org.junit-4.7.0.jar가 아닌 junit.junit-4.12.jar를 받음

JUnit 테스트 실행

JUnit 테스트를 실행할 main() 메소드

public static void main(String[] args) {
    JUnitCore.main("com.david.tobysspring.user.dao.UserDaoTest");
}


' Spring > 토비의 스프링 3.1' 카테고리의 다른 글

2.4 스프링 테스트 적용  (0) 2019.01.17
2.3 개발자를 위한 테스팅 프레임워크 JUnit  (0) 2019.01.14
2.1 UserDaoTest 다시보기  (0) 2019.01.11
2장. 테스트  (0) 2019.01.11
1장. 오브젝트와 의존관계  (0) 2019.01.11