스프링에서의 테스트
스프링은 IoC/DI를 이용해 엔터프라이즈 애플리케이션을 효과적으로 개발하기 위한 기술이다.
복잡한 엔터프라이즈 애플리케이션을 개발하는데 스프링이 제공하는 주요 기술은 2가지 이다.
애플리케이션은 계속 변하고 복잡해져 간다. 그 변화에 대응할 수 있는 방법은 2 가지 이다.
1장에서 만든 UserDao가 기대했던 대로 동작하는지 확인하기 위해 간단한 테스트 코드 (main 클래스)를 만들었다.
해당 테스트 코드는 UserDao 코드의 구조와 설계, 적용한 기술이 변경되더라도 초기 테스트 코드의 목적에 맞게 DB에 사용자 정보를 등록하고, 가져오는 기능을 잘 수행하는지를 테스트 하는 것 이었다.
테스트 : 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 만든 코드를 확신할 수 있게 해주는 작업이다.
1장에서 만들었던 main( ) 테스트 코드 이다.
public class main {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
UserDao userDao = context.getBean("userDao", UserDao.class);
// insert test
User user = new User();
user.setId("Id");
user.setName("test_name");
user.setPassword("Password");
userDao.add(user);
System.out.println(user.getId() + "등록 성공");
// select test
User searchedUser = userDao.get(user.getId());
System.out.println(searchedUser.getName());
System.out.println(searchedUser.getPassword());
System.out.println(searchedUser.getId() + "조회 성공");
}
}
이 테스트 코드 내용을 정리해보면 다음과 같다.
보통 웹 프로그램을 통해서 DAO를 테스트 하는 방법은 다음과 같다.
이렇게 웹 프로그램을 통해서 테스트 하는 방법은 DAO에 대한 테스트로서는 단점이 너무 많다.
그렇다면 테스트를 어떻게 만들면 이런 문제를 피할 수 있고, 효율적으로 테스트를 활용할 수 있는지 생각해보자.
테스트 하고자 하는 대상이 명확하다면 그 대상에만 집중해서 테스트하는 것이 바람직하다.
단위 테스트 : 하나의 단위 코드에 대해 테스트를 수행하는 것
main(UserDaoTest)의 한 가지 특징은 main( )메소드를 실행하는 가장 간단한 방법만으로 테스트의 전 과정이 자동으로 진행된다.
웹을 통한 테스트를 수행하게 되면, 객체 생성 부터 화면 조회까지 개발자 스스로 입력하고 확인해야 하는 번거러운 작업을 테스트 마다 반복해야 한다.
이렇게 테스트는 자동으로 수행되도록 코드로 만들어지는 것이 중요하다.
장점
1장에서 처음 만든 초난감 DAO코드에서 부터 스프링을 이용한 최종 코드까지 발전시키는 과정의 일등 공신은 바로 이 테스트였다.
테스트가 없었다면, 다양한 코드를 수정하고 설계를 개선해나가는 과정에 확신을 가질 수 없었을 것이다.
테스트를 이용하면
main( ) 테스트를 위한 입력 데이터의 준비와 테스트 수행과정은 모두 자동으로 수행된다.
하지만, 테스트 결과를 확인하기 위해서는 개발자가 직접 콘솔을 확인해야 한다.
만약 DAO가 수백 개가 되고 그에 대한 테스트를 위해 main( )메소드도 그만큼 만들어진다면.
전체 기능을 테스트해보기 위해 main( )메소드를 수백번 실행하는 수고가 필요하다.
또한 그 결과를 눈으로 확인하기도 번거로운 작업이다.