테스트
: 결국 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 만든 코드를 확신할 수 있게 해주는 작업결함
이 있음을 알 수 있음. 이를 통해 코드의 결함을 제거
하는 작업, 디버깅
을 거치게 되고 최종적으로 테스트가 성공
하면 모든 결함이 제거됐다는 확신
을 얻을 수 있음.//main() 메소드로 작성된 테스트
public class UserDaoTest {
public static void main(String[] args) throws SQLException {
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
UserDao dao = context.getBean("userDao", UserDao.class);
User user = new User();
user.setId("user");
user.setName("백기선");
user.setPassword("married");
dao.add(user);
System.out.println(user.getId() + " 등록 성공");
User user2 = dao.get(user.getId());
System.out.println(user2.getName());
System.out.println(user2.getPassword());
System.out.println(user2.getId() + " 조회 성공");
}
}
🌟 이 테스트 코드의 내용을 정리
main()
메소드를 이용한다.UserDao
의 오브젝트를 가져와 메소드를 호출한다.User
오브젝트)을 직접 코드에서 만들어 넣어준다.성공 메시지
로 출력해준다.main()
메소드를 이용해 쉽게 테스트 수행을 가능하게 했다는 점, 테스트할 대상인 UserDao
를 직접 호출해서 사용한다는 점테스트하는 방법
: 서비스 계층, MVC 프레젠테이션 계층까지 포함한 모든 입출력 기능
을 대충이라도 코드로 만듦가장 큰 문제
: DAO
뿐만 아니라 서비스 클래스, 컨트롤러, JSP 뷰 등 모든 레이어의 기능
을 다 만들고 나서야 테스트가 가능하다는 점UserDao
였는데 다른 계층의 코드와 컴포넌트, 심지어 서버의 설정 상태까지 모두 테스트에 영향을 줄 수 있기 때문에 이런 방식으로 테스트하는 것은 번거롭고, 오류가 있을 때 빠르고 정확하게 대응하기가 힘들다
는 단점가능하면 작은 단위
로 쪼개서 집중하는 것이 좋음.UserDaoTest
의 테스트를 수행할 때는 웹 인터페이스나, 그것을 위한 MVC 클래스, 서비스 오브젝트 등이 필요없음. 간단히 IDE(표준자바 IDE - 이클립스)나 도스창
에서도 테스트 수행 가능 unit test
: 작은 단위의 코드에 대해 테스트를 수행하는 것UserDaoTest
: 단위 테스트임. DAO 기능
과 DB
까지로 단위
를 잡고 집중해서 테스트User
오브젝트를 만들어 적절한 값을 넣고, 이미 DB 연결 준비
까지 다 되어 있는 UserDao
오브젝트를 스프링 컨테이너
에서 가져와서 add()
메소드를 호출하고, 그 키 값으로 get()
을 호출하는 것까지 자동으로 진행됨별도로 테스트용 클래스
를 만들어서 테스트 코드를 넣는 편이 나음작은 단계
를 거쳐가면서 계속 코드를 개선
작은 단계를 거치는 동안 테스트를 수행
해서 확신
을 가지고 코드를 변경해갔기 때문에 전체적으로 코드를 개선하는 작업에 속도가 붙고 더 쉬워짐.사람의 눈으로 확인
하는 과정 필요 : add()
에서 User
정보를 DB
에 등록하고, 이를 다시 get()
을 이용해 가져왔을 때 입력한 값과 가져온 값이 일치
하는지를 테스트 코드는 확인해주지 않음
, 콘솔 값만 출력
테스트의 결과를 확인
하는 일은 사람의 책임
이므로 완전히 자동으로 테스트되는 방법이라고 말할 수가 없음main()
메소드라고 하더라도 매번 그것을 실행하는 것은 번거로움
DAO가 수백 개
가 되고 그에 대한 main() 메소드도 그만큼 만들어진다면, 전체 기능을 테스트해보기 위해 main() 메소드를 수백 번 실행
하는 수고가 필요