백엔드 데브코스 TIL 16일차

Inchang Choi·2022년 4월 12일
0

백엔드 데브코스 TIL

목록 보기
12/30
post-thumbnail

학습목표

강의를 들으며 내가 알고 있는 내용을 점검하고,

새로 배운 내용을 정리하며,

궁금한 내용을 알아가며 학습해나가는 것을 목표로 합니다.


스프링 테스트

소프트웨어 테스팅

소프트웨어 테스트는 소프트웨어에 결함이 있는지 찾는 작업입니다.

이러한 테스트에는 절차가 있습니다.

Test Level

  • Unit Test
  • Integration test
  • System Test
  • Acceptance Test

테스팅 피라미드

UI 테스트는 end to end test로, 셀레니움으로 주로 테스팅합니다.

데이터베이스나, 아마존 AWS S3와 같은 외부 API간의 연동을 Integration test로 분류합니다.

component test는 서비스 전체를 대상으로 진행하는 테스트 입니다.

End-to-End는 처음부터 끝까지 테스트를 진행하는 테스트 입니다.

단위 테스트

  • 백엔드 엔지니어가 가장 많이 작성하는 테스트 입니다.
  • 소프트웨어에서 테스트 가능한 가장 작은 단위의 테스트입니다.
  • 각각의 서비스, 도메인, 레포지토리 별로 테스트가 진행 가능합니다.
  • 특정 부분을 고립하여 테스트하고, 실행이 빠르다는 특징이 있습니다.

테스트 코드의 작성은 Given-When-Then으로 구분하며

  • Given 어떤 상황이 주어졌을 때
  • When 이러한 일이 발생하면
  • Then 이런 결과가 될 것 입니다.

의 결과를 만들어 낼 수 있게 테스트 코드를 작성합니다.

단위 테스트의 장점은,

  1. 소프트웨어를 개발하다보면 지속적으로 코드가 변경이 이루어 집니다.

    하지만 이러한 과정에서 오류가 발생 할 수 도 있는데

    그러한 오류를 테스트 코드로 인하여 보호 받을 수 있습니다.

  2. 테스트 코드만 보고도 상황, 원인, 결과를 알 수 있기 때문에 소프트웨어의 기능을 빠르게 파악할 수 있습니다.

테스트 더블

의존 구성요소를 사용할 수 없을 때 테스트 구성요소와 상호 작용하는 객체입니다.

즉 단위 테스트 시, 협력 관계에 있는 객체를 주입 받을 수 없을 때 가짜로 만들어서 전달하는 객체입니다.

통합 테스트

통합 테스트는 단위 테스트보다 큰 범위에서 여러 모듈들을 모아 이들이 협력관계를 검증하는 테스트입니다.

통합테스는 주로 DB나 외부 라이브러리와 단위 테스트를 묶어 검증 할 때 사용합니다.

JUnit

자바의 대표적인 오픈소스 테스트 프레임워크입니다.

스프링 부트 2.2부터 Junit5가 기본적으로 제공되어 의존성을 추가할 필요가 없습니다.

  • 매 단위 테스트 마다 테스트 클래스의 인스턴스가 생성되어 독립적인 테스트가 가능하게 해 이전 테스트가 다음 진행되는 테스트에 영향을 주지 않습니다.
  • 어노테이션을 제공해서 테스트 라이프 사이클을 관리하게 해주고 테스트 코드를 간결하게 작성하도록 지원해줍니다.
  • 테스트 러너를 제공해서 인텔리제이 / 이클립스 / 메이븐 등에서 테스트 코드를 쉽게 실행하게 해줍니다.
  • assert와 같은 static method로 테스트 케이스의 수행 결과를 쉽게 판별하게 해줍니다.

Junit4와 Junit5

Junit4는 junit.jar라는 하나의 jar 파일로 배포 되어 확장성이 굉장히 떨어졌습니다.

그러나 Junit5에서는 3개의 모듈이 제공됩니다.

  • JUnit Platform JVM 상에 테스트 프레임워크를 실행하기 위한 기반을 제공합니다. 테스트를 발견하고 테스트 계획을 생성하는 TestEngine 인터페이스를 가지고 있고, TestEngine을 통해 테스트를 발견, 실행, 결과를 보고합니다.
  • JUnit Jupiter 테스트 엔진의 실제 구현체인 jupiter-engine은 jupiter-api를 사용해서 작성한 테스트 코드를 발견하고 실행합니다. Jupiter API는 JUnit 5에 새롭게 추가된 테스트 코드 API이며 개발자는 Jupiter API를 사용해 테스트 코드를 작성 할 수 있습니다.
  • JUnit Vintage JUnit 4 버전으로 작성한 테스트 코드를 실행할 때에는 vintage-engine 모듈을 사용합니다.

Mock Object

모의 객체는 행위 검증을 사용하고, stub를 포함한 다른 대역들은 상태 검증을 사용합니다.

  • 상태검증 메소드가 수행된 후, 객체의 상태를 확인하여 올바르게 동작 했는지를 확인하는 검증법입니다.
  • 행위 검증 메소드의 반환 값으로 판단할 수 없는 경우 특정 동작을 수행하는지 확인하는 검증법입니다.

모의 객체는 호출에 대한 기대를 명세합니다.

Mock Object Test Framework

  • Mockito
  • JMock
  • EasyMock

Spring의 JUnit5

단위 테스트 지원

  • Mock Objects 지원
  • General Testing Utilities
  • Spring MVC Testing Utilities

통합 테스트 지원

  • Spring TestContext Framework
  • MockMvc
profile
always positive

0개의 댓글