테스트 : 결국 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 만든 코드를 확신할 수 있게 해주는 작업결함이 있음을 알 수 있음. 이를 통해 코드의 결함을 제거하는 작업, 디버깅을 거치게 되고 최종적으로 테스트가 성공하면 모든 결함이 제거됐다는 확신을 얻을 수 있음.//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() 메소드를 수백 번 실행하는 수고가 필요