[Springboot] 테스트코드 작성
TDD와 단위테스트(Unit Test)의 차이
● TDD: 테스트가 주도하는 개발
- 항상 실패하는 테스트를 먼저 작성하고(Red)
- 테스트 코드를 성공시키기 위한 실제 코드를 작성하고(Green)
- 테스트가 통과하면 실제 코드를 리팩토링 합니다.(Refactor)
● TDD가 필요한 이유
보통의 개발 방식은 '요구사항 분석 -> 설계 -> 개발 -> 테스트 -> 배포' 의 형태의 개발 주기를 갖는데 이러한 방식은 소프트웨어 개발을 느리게 하는 잠재적 위험이 존재합니다. 초기 설계가 완벽한 프로젝트는 없기 때문에 고객의 요구사항 또는 디자인의 오류 등 많은 외부 또는 내부 조건에 의해 재설계하여 점진적으로 완벽한 설계로 나아갑니다. 재설계로 인해 개발자는 코드를 삽입, 수정, 삭제 하는 과정에서 불필요한 코드가 남거나 중복처리 될 가능성이 큽니다.
작은 부분의 기능 수정에도 모든 부분을 테스트해야 하므로 전체적인 버그를 검출하기 어려워집니다. 결론적으로 이러한 코드들은 재사용이 어렵고 유지보수를 어렵게 만듭니다.
TDD와 일반적인 개발 방식의 가장 큰 차이점은 테스트 코드를 작성한 뒤에 실제 코드를 작성한다는 점입니다. 디자인(설계) 단계에서 프로그래밍 목적을 반드시 미리 정의해야만 하고, 또 무엇을 테스트해야 할지 미리 정의(테스트케이스 작성)해야만 합니다. 테스트 코드를 작성하는 도중 발생하는 버그, 수정사항 들은 테스트 케이스에 추가하고 설계를 개선합니다. 이후 테스트가 통과된 코드만을 코드 개발 단계에서 실제 코드로 작성합니다.
이러한 반복적인 단계가 진행되면서 코드의 버그가 줄어들고, 소스코드는 간결해집니다. 또한 재설계 시간이 줄어듭니다.
● 단위 테스트 : 기능 단위의 테스트 코드를 작성하는 것(TDD의 첫 번째 기능)
TDD와 달리 테스트 코드를 꼭 먼저 작성해야 하는 것도 아니고 리팩토링도 포함되지 않습니다. 순수하게 테스트 코드만 작성하는 것을 이야기합니다.
● 단위테스트의 장점
① 빠른 피드백
테스트케이스가 있으면 프로그램을 실행하고 테스트하고 프로그램을 중지할 필요가 없습니다.
② 자동검증
System.out.println()을 쓸 필요가 없습니다.
③ 개발자가 만든 기능을 안전하게 보호해줍니다.
테스트케이스는 새로운 기능이 추가될 때, 기존 기능이 잘 작동되는 것을 보장해줍니다.
● 대표적인 테스트 프레임워크 : xUnit
ex) JUnit - Java
REFERENCE
[기술면접] TDD(Test-Driven-Development) 방법론에 대해서
TDD(Test-Driven-Development) 방법론에 대해서 파헤쳐보자! ❓ TDD가 무엇입니까? - TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 한다. 반복 테스트를 이용한 소프트웨어 방법론으로, 작은.
wooaoe.tistory.com
스프링 부트와 AWS로 혼자 구현하는 웹 서비스