-
2장) 2.1 USERDAOTEST 다시보기 ~ 2.2 USERDAOTEST 개선Java & Spring/토비의 스프링 3.1 2021. 5. 27. 13:51반응형
2장 테스트
- 객체지향 기술과 더불어 하나의 도구로 스프링이 강조하고 가치를 둔다.
2.1 UserDaoTest 다시보기
테스트의 유용성
- 테스트란, 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인 ~> 확신
- 결과가 원하는 대로 나오지 않는 경우 ~> 코드나 설계에 결함 확인
- 테스트란, 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인 ~> 확신
웹을 통한 DAO 테스트 방법의 문제점
- 문제점
- DAO 뿐만 아니라 서비스, 컨트롤러, 뷰 등 모든 레이어 기능을 만든 후, 테스트가 가능
- 테스트에 실패하면, 어디에서 문제가 발생했는지 찾아야하는 수고가 필요
- 문제점
단위 테스트
테스트는 가능하면 작은 단위로 쪼개서 집중해서 할 수 있어야한다.
관심이 다르다면, 테스트할 대상을 분리하고 집중해서 접근한다
작은 단위 코드에 대한 테스트가 단위 테스트이다.
- 정해진 범위나 단위가 정해지지는 않았지만, 하나의 관심에 집중해서 효율적으로 테스트할 만한 범위
통제할 수 없는 외부 리소스에 의존하는 테스트는 단위 테스트가 아니라고 보기도 한다
테스트에 DB가 사용되는 경우
DB 상태가 매번 달라지고, 테스트를 위해 DB를 특정 상태로 만들어줄 수 없는 경우
~> 테스트로서 가치가 없음
자동수행 테스트 코드
- 번거로운 작업이 없이 자주 반복할 수 있어야 한다
- 운영 중인 코드를 수정하려고 하면 간단한 수정이라도, 전체 애플리케이션에 문제를 일으키지 않을까 하는 고민이 생긴다.
- 이 때, 자동 수행 테스트를 통해, 최대한 빠르게 확인하고 성공하는지 확인해야한다.
- 번거로운 작업이 없이 자주 반복할 수 있어야 한다
지속적인 개선 & 점진적인 개발을 위한 테스트
- 앞서 초난감 DAO코드를 개선해나갔는데, DAO 기능에 문제가 없는지 검증하는 테스트를 만들어 두고, 자신을 가지고 코드를 개선해나갔다.
- 기능을 만들고, 테스트로 검증 ~> 코드에 대한 확신을 갖는다.
- 기능을 조금씩 추가하면서, 테스트도 함께 추가 ~> 점진적인 개발
UserDaoTest의 문제점
- 수동 확인 작업의 번거로움
- 현재 작성된 코드는 콘솔에 값만 출력해줄 뿐, 결과를 확인하는 일이 사람의 책임으로 되어있다.
- 검증의 양이 많고 복잡해지면 실수할 가능성이 높아짐
- 현재 작성된 코드는 콘솔에 값만 출력해줄 뿐, 결과를 확인하는 일이 사람의 책임으로 되어있다.
- 실행 작업의 번거로움
- 테스트 규모가 커질수록 main() 메소드를 호출해야하는 번거로움이 증가하고, 결과를 확인하고 문서화하는 작업이 개발만큼 큰 작업이 될 수 있음
- 수동 확인 작업의 번거로움
2.2 UserDaoTest 개선
테스트 검증의 자동화
- 모든 테스트는 성공 / 실패 로 결과가 나뉜다.
- getName, getPassword의 값이 같은지 다른지 비교하여, if / else를 통해 테스트를 성공 / 실패 처리해주도록 바꾼다.
테스트의 효율적인 수행과 결과 관리
- main() 메소드를 이용한 테스트 작성 방법
- 애플리케이션 규모가 커지고 테스트 개수가 많아지면 테스트 수행이 점점 부담
- JUnit
- 자바로 단위 테스트를 만드는 것을 지원해주는 라이브러리
- main() 메소드를 이용한 테스트 작성 방법
JUnit 테스트로 전환
테스트 메소드의 조건
- public으로 선언되야 한다.
- @Test 애노테이션을 붙여야 한다.
public class UserDaoTest { // ... @Test public void addAndGet() throws SQLException { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao dao = context.getBean("userDao", UserDao.class); // ... } }
- 테스트 메소드 조건에 따라 바꾸어 주면 위와 같은 형태의 코드가 된다.
- @Test 애노테이션마다 하나의 단위 테스트가 됨
검증 코드 전환
위에서 if / else 처리했던 문장을 JUnit이 제공해주는 assertThat을 사용해서 변경
assertThat(user2.getName(), is(user.getName()));
반응형'Java & Spring > 토비의 스프링 3.1' 카테고리의 다른 글
2.4 스프링 테스트 적용 ~ 2.6 정리 (0) 2021.06.03 2장) 2.3 개발자를 위한 테스팅 프레임워크 JUnit (0) 2021.06.01 1장) 1.8 XML을 이용한 설정 ~ 1.9 정리 (0) 2021.05.27 1장) 1.6 싱글톤 레지스트리와 오브젝트 스코프 ~ 1.7 의존관계 주입(IoC) (2) 2021.05.21 1장) 1.3 DAO의 확장 ~ 1.5 스프링의 IoC (1) 2021.05.17