테스트 코드와 TDD 🧪(feat. 프론트엔드, 백엔드를 위한 테스트 코드)
✅ 해당 영상을 보고 정리하여 작성한 내용입니다.
필요한 기능을 빠르게 구현할 수 있는것을 포함하여 기능에 해당하는 테스트를 작성하는 것도 개발자의 역량
(기술 면접 상황)
Q : 기능 구현 코드를 작성해 보세요. 작성한 기능이 제대로 구현됐는지 어떻게 검증하죠? 어떻게 확신하시겠어요?
A : 그야 당연히 테스트죠! 방금 작성한 코드를 검증할 수 있는 테스트 코드를 작성하고 이 테스트 코드를 통해서 어떻게 내가 방금 작성한 코드를 향상할 수 있는지 리팩토링도 진행해 보았습니다.
개발자는 기능을 구현하는 사람 일 수도 있지만 자신감 있는, 여유 넘치는 개발자가 되기 위해서는 테스트를 잘 작성하는 것도 정말 중요하다.
제품(= 함수, 특정한 기능, UI, 성능, API 스펙)이 예상하는 대로(=원하는 대로) 동작 하는지 검증하고 확인하는 것
우리의 목표가 무엇인지에 따라, 플랫폼과 환경이 무엇인지에 따라서 다양한 테스트가 있다. (Unit Test, Functional Test,Integration Test, Component Test, Contract, E2E Test 등)
테스트 프로세스는 딱 하나로 정의할 수 있다.
특정한 기능을 수행하는 비즈니스 로직을 가지고 있는 소스 코드가 있다면
그에 해당하는 테스트 코드를 작성합니다. (이때 이 테스트 코드는 우리의 코드가 우리가 예상하는 원하는 기대(expectation)에 맞는지 확인할 수 있어야 한다.) ex) 함수가 어떻게 동작해야 하는지, 특정한 상황에서 어떻게 기능을 해야 하는지, UI는 어떻게 보여줘야 하는지, 성능은 어떻게 돼야 되는지, API 스펙은 어떻게 돼야 되는지 이런 정의에 따라서 다양한 테스트 프레임워크나 라이브러리를 사용할 수 있다.
특정한 상황에 우리가 원하는 대로 예상하는 대로 동작하는 것을 검증하는 테스트 코드를 작성해 두었다면 테스트 코드를 수행해서 모든 테스트가 다 통과되는지 확인해야 한다.
모든 테스트가 다 통과된다면, 코드가 원하는 대로 동작한다고 검증할 수 있다.
만약 테스트가 실패한다면 코드에서 어떤 부분이 잘못되엇는지 확인하고 수정해야 한다.
(테스트가 다시 통과될 때까지 이 부분을 다시 반복해 줘야 합니다.)
✨ 테스트의 포인트
바로 우리가 예상하는 기대(expectation)에 맞게 우리 코드가 동작하는지 검증하는 것!
개발 하기(코드 작성) 전에 테스트 코드를 먼저 작성하는 방식
어떤 특정한 기술 프레임워크나 라이브러리를 말하는 것이 아니라 우리가 어떻게 개발해 나갈 건지 개발 방식, 개발 방법론 중 하나이다.
이렇게 하나의 테스트가 완성이 되면 , 이제 그다음의 기능으로 넘어가서
✔ 그 기능에 해당하는 테스트를 작성 > 테스트를 수행해서 실패하면 실패하는 코드가 성공할 수 있을 만큼의 코드를 작성 > 다시 테스트를 수행해서 성공하면 다시 그 다음 테스트를 작성
이렇게 TDD 방법을 이용해서 모든 기능이 다 구현이 완료 되었다면 그 동안 작성해왔던 모든 테스트들이 성공적으로 통과가 된다.
여기까지는 기능을 구현하는 데에만 집중해서 빠르게 코드를 작성했다면, 우리가 작성해놓은 테스트를 기반으로 조금 더 자신감 있게 코드를 퀄리티를 향상하고, 아키텍처 개선하고, 리팩토링을 해나갈 수 있다.
TDD란 실패하는 테스트를 먼저 작성하고, 그에 해당하는 기능을 구현해나가는 방식
TDD 장점
중요한 사실은 TDD를 하든 하지 않든 우리의 코드를 사용자에게 배포하기 전에, Main Repository에 merge 하기 전에, 내가 작성한 코드에 버그는 없는지? 기존에 존재하던 기능들이 내 코드에 의해서 영향을 받지는 않았는지, 이런 것들을 검증할 수 있는 테스트를 꼭 포함해야 한다. 테스트가 없는 코드를 Main Repository에 merge 하거나 사용자에게 배포했을 때 그때 발생할 수 있는 위험부담은 결국 내가 짊어지고 가야 된다 🤯💣