[Spring] UserDaoTest

Zoe·2022년 1월 13일
0

Spring

목록 보기
4/9
post-thumbnail

UserDaoTest


✅ 테스트의 유용성

  • 테스트 : 결국 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서, 만든 코드를 확신할 수 있게 해주는 작업
  • 테스트의 결과가 원하는 대로 나오지 않는 경우에 코드나 설계에 결함이 있음을 알 수 있음. 이를 통해 코드의 결함을 제거하는 작업, 디버깅을 거치게 되고 최종적으로 테스트가 성공하면 모든 결함이 제거됐다는 확신을 얻을 수 있음.

✅ UserDaoTest의 특징

//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를 직접 호출해서 사용한다는 점

1️⃣ 웹을 통한 DAO 테스트 방법의 문제점

  • 테스트하는 방법 : 서비스 계층, MVC 프레젠테이션 계층까지 포함한 모든 입출력 기능을 대충이라도 코드로 만듦
  • 가장 큰 문제 : DAO 뿐만 아니라 서비스 클래스, 컨트롤러, JSP 뷰 등 모든 레이어의 기능을 다 만들고 나서야 테스트가 가능하다는 점
  • 테스트하고 싶었던 건 UserDao였는데 다른 계층의 코드와 컴포넌트, 심지어 서버의 설정 상태까지 모두 테스트에 영향을 줄 수 있기 때문에 이런 방식으로 테스트하는 것은 번거롭고, 오류가 있을 때 빠르고 정확하게 대응하기가 힘들다는 단점

2️⃣ 작은 단위의 테스트

  • 한 꺼번에 너무 많은 것을 몰아서 테스트하면 테스트 수행 과정도 복잡해지고 오류가 발생했을 때 정확한 원인을 찾기가 힘들어짐. 가능하면 작은 단위로 쪼개서 집중하는 것이 좋음.
  • UserDaoTest의 테스트를 수행할 때는 웹 인터페이스나, 그것을 위한 MVC 클래스, 서비스 오브젝트 등이 필요없음. 간단히 IDE(표준자바 IDE - 이클립스)나 도스창에서도 테스트 수행 가능
  • unit test : 작은 단위의 코드에 대해 테스트를 수행하는 것
  • 단위는 작을 수록 좋음
  • UserDaoTest : 단위 테스트임. DAO 기능DB까지로 단위를 잡고 집중해서 테스트

3️⃣ 자동수행 테스트 코드

  • User 오브젝트를 만들어 적절한 값을 넣고, 이미 DB 연결 준비까지 다 되어 있는 UserDao 오브젝트를 스프링 컨테이너에서 가져와서 add() 메소드를 호출하고, 그 키 값으로 get()을 호출하는 것까지 자동으로 진행됨
  • 애플리케이션을 구성하는 클래스 안에 테스트 코드를 포함시키는 것보다는 별도로 테스트용 클래스를 만들어서 테스트 코드를 넣는 편이 나음

4️⃣ 지속적인 개선과 점진적인 개발을 위한 테스트

  • 일단은 단순 무식한 방법으로 정상동작하는 코드를 만들고, 테스트를 만들어 뒀기 때문에 매우 작은 단계를 거쳐가면서 계속 코드를 개선
  • 오히려 그렇게 작은 단계를 거치는 동안 테스트를 수행해서 확신을 가지고 코드를 변경해갔기 때문에 전체적으로 코드를 개선하는 작업에 속도가 붙고 더 쉬워짐.

✅ UserDaoTest의 문제점

1️⃣ 수동 확인 작업의 번거로움

  • 여전히 사람의 눈으로 확인하는 과정 필요 : add()에서 User 정보를 DB에 등록하고, 이를 다시 get()을 이용해 가져왔을 때 입력한 값과 가져온 값이 일치하는지를 테스트 코드는 확인해주지 않음, 콘솔 값만 출력
  • 테스트의 결과를 확인하는 일은 사람의 책임이므로 완전히 자동으로 테스트되는 방법이라고 말할 수가 없음

2️⃣ 실행 작업의 번거로움

  • 간단히 실행가능한 main() 메소드라고 하더라도 매번 그것을 실행하는 것은 번거로움
  • 만약 DAO가 수백 개가 되고 그에 대한 main() 메소드도 그만큼 만들어진다면, 전체 기능을 테스트해보기 위해 main() 메소드를 수백 번 실행하는 수고가 필요
profile
iOS 개발자😺

0개의 댓글