inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 백엔드 스터디 2기] 3주차 발자국

ykm8864
0

워밍업 클럽 백엔드 스터디 2기 3주차 발자국 입니다.

본격적인 TDD 가이드에 대하여 배우기 시작했습니다.

테스트는 왜 필요할까?

테스트 = 귀찮다?
프로그램이 커지면 수동테스트의 정확도가 어떨까?
사람이 할거야?

변화가 생기는 매순간마다 모든 팀원이 동일한 고민을 해야한다면 소프트웨어의 신뢰도가 낮아질 가능성이 높다.

 올바른 테스트 코드

자동화 테스트로 비교적 빠른 시간 안에 버그를 발견할 수 있고, 수동 테스트에 드는 비용을 크게 절약할 수 있다.

소프트웨어의 빠른 변화를 지원한다.

팀원들의 집단 지성을 팀 차원의 이익으로 승격시킨다.

가까이 보면 느리지만, 멀리 보면 가장 빠르다.

단위테스트란

작은 코드(클래그 or 메서드) 단위를 독립적으로 검증하는 테스트

단위테스트는 검증속도가 빠르고 안정적이다.

우리는 JUnit5 와 AssertJ 를 사용하여 테스트 코드를 작성해보았다.

 

테스트 케이스 세분화하기

질문하기 : 암묵적이거나 아지 드러나지 않은 요구사항이 있는가?

 해피케이스와 예외케이스에 대하여 테스트 케이스를 세분화 해야한다.

-> 경계값 테스트라는 개념을 배웠다.

어떠한 정수가 있는데 정수가 3이상일 때, A라는 조건이 성립한다면?

⇒ 테스트를 4나 5로 테스트 하는게 야니고 3에 대하여 테스트를 작성하는게 맞다.

⇒ 예외 케이스는 2나 1이나 -1과 같은 경계값보다 아래의 경우의 수로 예외케이스를 짜는게 맞다.

 

테스트하기 어려운 영역 분리하기

외부세계에 관련된 도메인은 테스트하기 어려우니 분리하여 가능한 것에 집중한다.

input 과 output이 외부세계에 영향을 주거나, 외부세계에 영향을 받는 경우에는 테스트하기 어렵다.

ex) 표준출력, 메시지발송, 데이터베이스에 기록하기 등..

 강의에서는 "현재시간" 은 테스트를 돌리는 시간이 바뀜에 따라 매번 결과값이 달라질 수 있으므로 정확한 테스트가 어려워 프로덕트 코드에는 현재시간을 매개변수로 넣고, 테스트할 때는 테스트 하고자 하는 시간을 매개변수로 세팅하여 분리한다.

즉, 테스트 어려운 조건이 생기면 테스트 어려운 영역을 외부로 분리하여 조치한다.

TDD

프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현 과정을 주도하도록 하는 방법론

RED - GREEN - REFACTOR

위 과정으로 TDD가 이루어진다. 실패케이스를 먼저 짜고, 통과를 위한 통과 케이스를 짜고, 리팩토링하고 이를 반복한다.

선기능 구현, 후 테스트의 문제점

 

테스트는 [문서]다.

언어가 사고를 제한한다.

DisplayName을 섬세하게

테스트 하고자 하는 내용을 명확하게 기술하자

 

레이어드 아키텍쳐와 테스트

Presentation Layer - Business Layer - Persistence Layer
관심사의 분리를 위해 레이어를 분리한다.

기본적인 JPA 엔티티를 설계하고 테스트하고자하는 레이어를 분리하였다.

Persistence Layer 테스트

Business Layer 테스트

도메인 로직에 대한 테스트 코드를 작성하였다. 이때 트랜잭션에 대한 관리가 중요했다.

상품을 주문할 때, 제고차감에 대한 로직에서 트랜잭션 관리의 중요성을 느꼈는데 기본적인 테스트코드에서의 @Transactional 개념은 이러하다.

이렇게 보면 무조건 트랜잭션 어노테이션을 사용하는 것이, AfterEach를 통한 수동 삭제보다 이점이 크다는 생각이 들지만, 테스트코드에만 트랜잭션이 잡혀있고 실제 프로덕션 코드에는 트랜잭션이 안 잡혀있을 수 있는 위험성이 있으므로 팀원 내부적인 공지나 개발자의 인지가 필요하다.

이런 점을 놓치면 심각한 상황이 발생할 수 있다. 테스트코드는 통과했지만 실제 운영에는 버그가 생기는 것이다. 예를 들어, 주문을 생성하고 주문에 포함된 상품이나 재고를 업데이트하는 작업이 순차적으로 실행될 때, 중간에 예외가 발생하면 앞서 실행된 작업은 롤백되지 않아 장애가 있을 것이다.

 

3주차 회고

 

백엔드 워밍업클럽2기 몰입하는개발자 백엔드 테스트코드 TDD

답변 0