Search

TDD

왜 TDD가 중요할까?

소프트웨어 (프로그램)의 거대화

개발해야되는 스코프가 점점 더 많아짐에 따라 유지보수 및 장애 발생시 대처를 유연하게 할 수 있다.

좋은 Test Code

요구사항이 바뀌면 TestCode도 실패해야 한다.

TestCode의 종류

크게 3가지로 나눌 수 있다.

1. E2E Testing (End-to-End testing)

컨트롤러 단부터 DB까지 전체적인 플로우 테스트
애플리케이션이 제공하는 기능을 사용자 시나리오 기반으로

2. Integration Testing

간단하게 말하면 DB에 직접 붙어서 하는 테스트
서로 다른 module / system 의 상호작용
맞물려 돌아가는 기능이 모여 정상적으로 원하는 기능을 제공하는지 점검

3. Unit Testing

단위 모듈 테스트
단일 기능 혹은 작은 단위의 함수/객체 등을 테스트한다.
새로운 기능 혹은 개선이 기존의 rule을 위배하지 않는지 검

Test Double

실제 컴포넌트를 대체할 수 있도록 하는 대역
실제 컴포넌트에 대해 행동을 모방하고 강한 결합도를 낮춘다.
ex) Mock, Stub

Mock

테스트를 위해 특정 기능에 대해 정해진 응답을 제공하는 객체
입력과 상관없이 어떤 행동을 할 지에 초점을 맞춘 객체
컨트롤러에 목데이터를 반환하고 컨트롤러에 요청을 하는 식으로 사용

Stub

테스트에 필요한 호출에 대해 미리 준비된 응답을 제공하는 객체
it('[Stub Class] 주문이 완료되지 못했다면 에러가 발생한다', () => { // given const stubRepository = new class extends OrderRepository { override findById(id: number): Order | undefined { return Order.create(1000, LocalDateTime.now(), ''); } } const sut = new OrderService(stubRepository); // when const actual = () => { sut.validateCompletedOrder(1) }; // then expect(actual).toThrow('아직 완료처리되지 못했습니다.'); });
JavaScript
복사