말 그대로 내 코드의 테스트를 말한다.
내가 작성한 코드가 잘 돌아가는지 문제가 없는지를 확인하는 것이다.
매번 내가 개발을 하고 데이터가 잘 들어갔는지 데이터를 잘 가지고 오는지 확인했던 부분이
모두 테스트에 들어가는 것이였다...
하지만 토비의 스프링에서는 이런 부분을 자동화하고 더욱 효율적인 테스트에 대해서 이야기를 하고있다.
테스트를 위한 코드 작성을 하는게 좋다는 이야기를 자주 들었었던거 같다....
프로젝트를 하면서 본인 코드에 에러를 잘 잡지 못하는 경우가 생겨 다른 팀원이 말해주는 경우도 있고
엄청 나중에 갑자기 발견하는 경우도 있었다. 그런 경우를 생각해보면 이런 부분도 꼭 훈련을해서 가는게
좋을꺼 같다는 생각이 든다~
테스트의 가치?
스프링으로 개발을 하면서 테스트를 만들지 않는다면 이는 스프링이 지닌 가치의 절반을
포기하는 셈이다. 스프링 개발자라면 테스트 작성 방법과 이를 효과적으로 개발에 활용하는 전략을 알아야
하며, 이를 실전에 적용할 수 있어야 한다!!
즉 테스트는 굉장히 중요하다!!!
웹 을 통한 DAO 테스트 방법의 문제점
보통 웹 프로그램에서 사용하는 DAO를 테스트히는 빙법은 디음과 같다
DAO를 만든 뒤 바로 테스트하지 않고, 서비스 계층, MVC 프레젠테이션 계층까지 포함한
모든 입출력 기능을 대충이라도 코드로 다 만든다. 이렇게 만들어진 테스트용 웹 애플리케이션을
서버에 배치한 뒤, 웹 화면을 띄워 폼을 열고 , 값을 입력한 뒤버튼을 눌러등록해본다.
이를 위해서는 폼의 값을 받아서 파싱한 뒤에 User 오브젝트로 만들고 UserDao 를 호출해주는 기능이
이미 만들어져 있어야 한다.
여기까지 해서 에러가 없으면 이번엔 검색 폼이나 파라미터를 지정할 수 있는 URL을 사용해서 방금
입력한 데이터를 다시 가져올 수 있는지 테스트해본다.
역시 UserDao가 돌려주는 결과를 화면에 출력해주는 기능이 만들어져 있어야 확인이 가능하다.
근데 문제점은 모든 기능을 다 만들고 나서야 테스트가 가능하다는 점이 큰 문제이다.
또한 에러의 원인이 너무 다양하는것도 큰 문제가 될 수 있다.
그렇다면 테스트를 어떻게 만들면 이런 문제를 피힐 수 있고. 효율적으로 테스트를 활용할 수 있을지
생각 해보자!
작은 단위 테스트
테스트하고자 하는 대상이 명확하다면 그 대상에만 집중해서 테스트 하는 것이 바람직하다.
한꺼번에 너무 많은 것을 몰아서 태스트하면 테스트 수행 과정도 복잡해지고,
오류가 발생했을 때 정확한 원인을 찾기가 힘들어진다. 따라서 테스트는 가능하면 작은 단위로
쪼개서 집중해서 할 수 있어야 한다.
이렇게 작은 단위의 코드에 대해 테스트를 수행하는 것을 단위 테스트(unit test)라고 한다!
전 과정을 하나로 묶어서 태스트할 필요가 생긴다.
각 단위 기능은 잘 동작하는데 묶어놓으면 안되는경우가 종종 발생하기 때문이다.
따라서 이런 길고 많은단위가참여하는 테스트도 언젠가는 필요하다. 그럴때
단위테스트 없이 긴 테스트만 하는 경우 , 아마도 수많은 에러를 만나거나 에러는 나지않지만
작동하지 않는 경험을 할 수 있다!
어쨌든 테스트 자체가 사람의 수작업을 거치는 방법을 시용하기보다는 코드로 만들어져서
자동으로 수행될 수 있어야 한다는 건 매우 중요하다.
개발자를 위한 테스팅 프레임워크 JUnit
main() 메소드로 만든 테스트는 테스트로서 필요한 기능은 모두 갖춘 셈이다.
하지만 좀 더 편리하게 태스트를 수행하고 편리하게 결과를 확인하려면 단순한
main() 메소드로는 한계가 있다.
그래서 테스트 결과를 종합해서 볼 수 있고 테스트가 실패한 곳을 빠르게 찾을 수 있는 기능을
갖춘 테스트 지원 도구와 그에 맞는 테스트 작성 방법이 필요하다.
그중에서도 프로그래머를 위한 자바 테스팅 프레임워크라고 불리는 JUnit은 이름 그대로
자바로 단위 테스트를 만들 때 유용하게 쓸수 있다!!
새로 만들 테스트 메소드는 JUnit 프레임워크가 요구히는 조건 두 가지를 따리야 한다.
1. 메소드가 public으로 선언돼야 히는 것
2. 메소드에 @Test라는 애노테이션을 붙여주는 것
JUnit 테스트 작성법과 실행법은 추후에 예제를 통해 포스팅 하겠습니다~~
'Spring Framework > study' 카테고리의 다른 글
Spring 트랜잭션 처리 @Transactional (0) | 2020.03.07 |
---|---|
Spring Bean Scope ? (0) | 2020.03.06 |
DI(Dependency Injection) ? (0) | 2019.12.23 |
IoC Container ? (0) | 2019.12.23 |
AOP(Aspect Oriented Programming) ? (0) | 2019.12.18 |