테스트 주도 개발
애자일 개발 방법론의 사용으로 테스트 주도 개발이 중요해졌다.
테스트 주도 개발이란?🤔
단위 테스트이다. 단위 테스트 코드를 개발한 다음에 제품 코드를 개발하는 방식
(클래스 단위로 테스트 코드가 가능)
실패할 만큼 테스트 코드 작성하고, 테스트를 통과할 만큼만!
기능별 업무 분담보다는 태스크 별로 업무를 공유하면서 진행하는 것이 좋다.
장점 : 문제 발생 시 즉각적인 원인 파악 해결 가능, 지속적인 통합 가능, 모든 부분에서 부분 테스트, 자동화된 리그레션 테스트(회귀 테스트)
*리팩터링 : 동일 기능 + 성능 향상, 가독성 향상
JUnit을 활용한 TDD
실습 - 초간단 계산기 개발
블랙박스 테스트 케이스를 만들었다는 가정하에
- 요구사항
- 초기 값 설정하지 않았으면 0으로 설정
- 초기 값을 생성자를 통해 설정 가능
- 덧셈 기능 제공
- 계산 결과 저장 기능- 멤버 변수(객체 속성) , 덧셈 기능은 이전 결괏값과 덧셈 수행
- 지우기 기능으로 계산 결과 값을 0으로 설정
- 이클립스 메이븐 프로젝트 생성
- JUnit 라이브러리를 위해 pom.xml 에 의존성 추가
- 실패할 만큼 테스트 코드 작성/수정
- 테스트 통과할 만큼 제품 코드 작성/수정
- 1의 테스트 목록 모두에 대해 4-5 반복
Mockito 프레임 워크??
모의 객체는 가짜 객체이다.
모의 객체가 필요할 경우?
CUT는 테스트해야 할 대상 클래스 + 객체를 말한다.
- 만약 협력 클랙스(협력 객체)가 구현되어있지 않을 경우 테스트용 모의 객체가 필요하다.
- 협력 클래스가 구현은 되어 있는데 사용자로부터 입력을 받아 결과가 달라질 때=간접입력 (CUT가 달라지는 경우)
- CUT가 반환 값없는 협력 객체의 함수를 호출할 경우 메서드들이 제대로 호출하는지= 간접 출력
모의 객체 분류
- 더미 객체 : 그냥 객체만 있는 형태, 호출 시 예외 발생
- 테스트 스텁, 특정값, true와 false 리턴
- 테스트 스파이 : 협력 클래스의 간접 출력 검증
- 가짜 객체 : 기능이 구현 안되어 있지만 된 것처럼, 협력 클래스가 미구현, 너무 느릴 때 사용
TDD에서 단위 테스트 작성 방법
1. 상태 테스팅
메서드를 호출 후 객체의 속성 값(멤버 변수)을 바꾸거나 올바르게 반환하는지 검증
2. 인터랙션 테스팅
객체의 행위 테스팅으로 리턴 값이 없을 때 , 어떤 행위를 하고 있는지 검증
대상 객체가 외부 협력 객체와 올바르상호작용을 하는지
⭐ 이전 시간 정리 ⭐
코드를 만들 때 각각의 클래스들이 제대로 되는지 테스트 코드를 하고 단위 테스트를 확실히 하는 것이 중요하다! 단위 테스트를 제대로 하려면 테스트 케이스도 중요하기 때문에 블랙박스 테스트와 화이트 박스 테스트에서 배웠던 방법들을 다시 생각해보자
추가적으로 중요한 것은 기획자와 설계자 구현자의 의견이 다를 수 있기 때문에 UML을 쓰는 것이 중요하다
협력을 할 때 , 자기 부분의 책임감을 가지고 확실히 해서 넘겨주자! 이것이 가장 효과적이고 개발자들에게 정말 중요한 것이다.