Ch03. 객체지향 패러다임

테스트 코드 작성 이유

  • 문서화 역할
  • 코드에 결함을 발견하기 위함
  • 리팩토링 시 안정성 확보
  • 테스트하다 보면 낮은 결합도 설계를 얻을 수 있음

TDD

  • Test Driven Development
  • 테스트 주도 개발
  • 프로덕션 코드보다 테스트 코드를 먼저 작성하는 개발 방법
  • TFD ( Test First Development ) + 리팩토링
  • 기능 동작을 검증 ( 메소드 단위 )

BDD

  • Behavior Driven Development
  • 행위 주도 개발
  • 시나리오 기반으로 테스트 코드를 작성하는 개발 방법
  • 하나의 시나리오는 Given , When , Then 구조를 가짐

경계 조건에 대한 테스트 코드 작성 권장

@ParameterizedTest

  • 여러 개의 테스트를 한번에 작성

@ValueSource

  • (strings = {"",""})
  • 테스트에 주입할 값을 배열로 지정
  • 테스트 , 배열 1:1 대응
  • byte, short, int, long, float, double, char, boolean,String, Class

import 하면 강한 결합? 클래스 내부에서 생성 = 강한 결합 외부에서 주입 받음 = 낮은 결합

@FuntionInterface

객체지향

  1. 추상화
  2. 다형성
  3. 캡슐화
  4. 상속

객체지향의 5가지 설계 원칙 ( SOLID )

  1. 단일책임원칙
  2. 개방 폐쇄의 원칙
  3. 리스코프 치환의 원칙
  4. 인터페이스 분리의 원칙
  5. 의존성 역전의 원칙

객체지향 패러다임

  • 객체에 책임을 할당하고 메세지를 주고 받는 것
  • SW 복잡도를 낮춤
  • 클래스가 아닌 객체에 초점
  • 객체에 적절한 역할과 책임을 할당하는지

given - when - then 패턴

  • given - 테스트 준비
  • when - 테스트 진행
  • then - 테스트 결과 검증

Mockito

  • 테스트에 사용할 가짜 객체인 Mock 객체를 쉽게 만들고, 관리하고 , 검증 할 수 있게 지원하는 테스트 프레임 워크

단위 테스트

  • 작성한 코드가 의도대로 작동하는지 작은 단위로 검증하는 것
  • 보통 메소드 단위

@DisplayName

  • 테스트 이름

@Test

  • 테스트를 수행하는 메소드

@BeforeAll

  • 전체 테스트 전 1회 실행
  • 테스트 환경 초기화

@BeforeEach

  • 테스트 케이스를 시작하기 전마다 실행

@AfterAll

  • 전체 테스트를 마치고 종료하기 전 1회 실행

@AfterEach

  • 테스트 케이스를 종료하기 전마다 실행

@AutoConfigureMockMvc

  • MockMvc를 생성하고 자동으로 구성하는 어노테이션

MockMvc

  • 어플리케이션을 서버에 배포하지 않고도 테스트용 MVC 환경을 만들어 요청 및 전송, 응답 기능을 제공하는 유틸리티 클래스