작성
·
17
0
안녕하세요. 토비님!
강의 정말 잘 듣고 있습니다.
테스트 코드를 작성해본 경험이 많지 않아서
강의 내에서 테스트 단원을 보다가 궁금한 점이 있어서 질문드립니다.
강의의 예제는 paymentService 를 테스트 하는 코드를 작성하시고,
스프링을 이용하지 않는 방법과 스프링을 이용해 DI 를 통한 테스트를 진행합니다.
코드는 paymentService 의 prepare 메소드 하나를 검증하는데,
사실은 3가지 목적. 적용환율, 원화 환산 금액, 원화 환산 금액 유효시간을 테스트 합니다.
실제로 현업에서 사용하는 서비스 에서는 보다 많은 코드와 기능이 존재할테고,
그에 따른 경우의 수도 기하급수적으로 많아질거라고 생각해요.
그렇다면 보통, 어떤 기준을 통해 테스트를 작성하는 것이 바람직한 테스트 일까요 ?
예를들어 제가 생각해본 여러가지 방법은 다음과 같습니다.
단순히 prepare 메소드 하나만. 메서드 단위로 테스트를 진행.
메서드 안에 존재하는 메서드(예시 코드에서는 provider 메서드) 단위.
목적에 따라서. 적용 환율을 잘 가져오는지, 원화 환산 금액이 잘 계산 되는지, 유효시간을 잘 지키는지.
그 밖에 여러가지 방법.
예를들어 기능이 잘 작동하는지 크게 테스트 한 뒤, 내부적으로 변동사항이 있을 법한 코드만 따로 분리해서 테스트.
물론, 프로젝트 특성이나 팀의 컨벤션, 서비스 코드를 작성할 코드의 특성에 따라서 달라지겠지만
테스트 코드를 작성할 때는 너무 작게도, 그렇다고 너무 뭉뚱그려서도 안된다고 이해하고 있습니다.
보편적으로 어떤 기준을 가지고 테스트 코드를 작성하게 되나요 ?
답변 2
0
테스트는 많으면 좋다고 생각하기 쉽지만, 사실은 테스트도 관리해야 할 코드이기 때문에 무조건 많다고, 혹은 커버리지가 높다고 좋은 건 아닙니다.
테스트는 중요한 것, 이 로직이 틀리면 버그가 되는 것, 내부 구현 방식이 변경될 가능성이 높은 것을 우선적으로 집중적으로 만드는 것이 가장 중요합니다. 그리고 테스트 실행을 빠르게 자주 할 수 있는 방식으로 하면 좋죠. 테스트를 하려면 서버에 배포하고 준비하고 사람이 손으로 뭔가 작업을 해서 10분 걸린다, 이러면 테스트를 잘 못하겠죠.
대체로 로직이라고 생각되는 코드, 보통 데이터를 변경하는 것, 조건이 붙는 것(if, switch) 등이 테스트를 잘 만들어야 할 코드입니다. 자칫 실수하면 심각한 버그가 될 수 있거든요. 테스트를 통해서 요구사항을 개발자가 잘 정리하기도 좋습니다.
테스트 범위나 단위는 절대적으로 어떻게 좋다고 정할 수 없습니다. 중요한 건 개발자가 테스트의 크기를 스스로 조율할 수 있어야 합니다. 이번 것은 테스트를 좀 작게 만들고, 작은 메소드 하나이지만 중요하니 이건 집중해서 하자, 이럴 수도 있고. 또 이건 너무 뻔한 패턴이고 전형적인 구조니까, 그냥 API 테스트 하나로 만들자, 이건 비슷한 코드가 너무 많으니 굳이 테스트 만들지 말자 하고 넘어갈 수도 있어야 합니다.
그걸 정하는 기준을 개발 스스로가 빠르게 판단하고, 필요하면 그 크기를 바꾸면서 진행하는 능력이 개발자에게 반드시 필요합니다. 코드를 많이 만들어보시면서, 작성된 코드와 테스트를 종종 리뷰해보세요. 그리고 어떻게 테스트를 만들었다면 더 좋았을까에 대해서 팀원들과 이야기도 많이 나눠보세요.
0
안녕하세요, 인프런 AI 인턴입니다.
우주님 질문 감사합니다.
테스트 코드를 작성할 때는 다양한 관점에서 접근할 수 있으며, 상황에 따라 적절한 전략을 선택하는 것이 중요합니다. 다음은 보편적으로 사용되는 테스트 기준입니다:
단위 테스트(Unit Testing):
목적 및 기능 기반 테스트:
통합 테스트(Integration Testing):
ApplicationContext
를 이용하여, 실제 애플리케이션 환경과 유사한 조건에서 테스트를 수행할 수 있습니다.기능적 테스트(Functional Testing):
변경 감지 테스트:
테스트의 작성 기준은 프로젝트의 특성, 코드의 구조, 팀의 컨벤션 등에 따라 달라질 수 있으며, 이로 인해 너무 세분화된 테스트나 지나치게 광범위한 테스트를 피하려면 위의 여러 기준을 적절히 조합하여 작성하는 것이 바람직합니다.
더 자세한 테스트 작성 방법에 대해서는 Spring Boot 공식 문서도 참조하시면 좋습니다.
문서 및 자료를 통해 지속적으로 학습하시기를 응원합니다!
테스트를 통해서 요구사항을 정리한다는 표현이 많이 와닿는 것 같슴니다!
스스로 기준을 판단할 수 있는 실력을 갖추는게 중요하겠네용. 답변 정말 감사합니다 :>