BackEnd/Spring & Springboot Study

[토비의 스프링] 2.1 UserDaoTest 다시 보기

2장 테스트 개요

 

끊임없이 변화하고 복잡한 애플리케이션

이 변화에 대응하는 첫번째 전략인 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI등의 기술을 알아봤다.

두번째 전략인 테스트는 만들어진 코드를 확신할 수 있게 해주고, 변화에 유연하게 대처할 수 있는 자신감을 준다.

 

테스트란 무엇이며, 그 가치와 장점, 활용 전략, 스프링과의 관계를 살펴보자.

테스트에 활용할 대표적인 테스트 프레임워크와 이를 이용한 학습 전략도 알아보자.

 

1. 테스트의 유용성

테스트는 개발자가 작성한 코드가 예상과 의도대로 동작하는지 확인하는 작업이다.
이를 통해 코드를 확신할 수 있고, 이는 즉 코드의 결함을 제거할 수 있다.

 

 

2. UserDaoTest의 특징

UserDaoTest Code

더보기
public class UserDaoTest {
    public static void main(String[] args) throws ClassNotFoundException, 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를 직접 호출해서 사용하는 코드이다.

위 코드(Junit을 사용하지 않은)는 다음과 같은 특징이 있다.

 

  • 웹을 통한 DAO 테스트 방법의 문제점
    • DAO로직만 다루는 것이 아닌 Web MVC, Service, server등을 모두 구현하고 Test class를 통해 실행한다.
    • 에러나 문제 발생시 범위가 넓어 문제 코드를 특정하기가 어렵다. (error code가 얽혀있을 가능성도 올라감)
    • 테스트가 굉장히 번거로움 (수동입력)
  • 작은 단위의 테스트
    • 문제점을 개선하기 위해 가능한 작은 단위로 쪼개서 테스트 할 필요가 있다 => 단위테스트 (Unit Test)
    • Unit Test는 하나의 관심에 집중하여 효율적으로 테스트할만한 단위라고 할 수 있다. (관심 외 동작은 참여X)
    • 이를 통해 개발자가 설계한 코드가 의도대로 동작하는지 빠른 피드백을 얻을 수 있다.
  • 자동수행 테스트 코드
    • 웹에서 입력하는 등 수동으로 입력하여 테스트하고 이를 확인하는 작업은 번거롭다.
    • 번거롭지 않고 자주 빠르게 확인하기 위해 자동으로 수행되는 코드를 만드는것이 중요하다.
    • 자주 빠르게 단위테스트를 하면 결함이 적은 코드를 만들 수 있다.
  • 지속적인 개선과 점진적인 개발을 위한 테스트
    • 테스트를 이용하면 새로운 기능이 잘 동작하는지 확인할 수 있다.
    • 기존 기능이 새로운 기능에 영향받지 않고 동작하는지 확인 가능하다.

 

3. UserDaoTest의 문제점

  • 수동 확인 작업의 번거로움
    • 개발자가 테스트 결과를 직접 확인하고 대조해야 한다.
    • 번거로움 작업이고 잘못 판단할 가능성이 있다.
  • 실행 작업의 번거로움
    • DAO가 수백개라고 가정
    • 수백개의 DAOTest를 일일이 실행하고 결과를 정리해야 하므로 매우 번거롭다.

 

다음 챕터에선 UserDaoTest를 개선하면서 더 나은 Testing방법에 대해 알아보자.