[Spring] TestCode

호성·2024년 4월 19일
1

팀 프로젝트를 진행 중 기존 기능을 수정 할 때마다 제대로 동작하는지 확인해야했는데, 기능이 늘어나면서 매번 API TEST로 확인하기가 힘들어 지면서 어렴풋이 알고있던 테스트 코드라는 개념에 대해서 정리해 보았다.

테스트 코드란?

작성한 코드가 의도대로 동작하고 예상치 못한 문제가 없는지 확인하는 목적으로 작성하는 코드

테스트 코드의 패턴

AAA패턴

  • Arrange(준비)
    테스트를 실행하기 전에 필요한 것들을 준비, 예를 들어 객체를 생성하거나, Mock 객체를 만들거나, 테스트 전에 호출되어야 할 API들을 호출하는 것을 의미
  • Act(실행)
    테스트 코드를 실행
  • Assert(단언)
    실행한 코드가 예상한대로 동작했는지 확인. assertTrue(), AssertThat()등의 코드들이 해당

Given-When-Then 패턴

  • Given
    테스트 실행을 준비하는 단계
  • When
    테스트를 진행하는 단계
  • Then
    테스트 결과를 검증하는 단계

SpringBoot 스타터 테스트 목록

  • JUnit : 자바 프로그래밍 언어용 단위 테스트 프레임워크
  • Spring Test & Spring Boot Test : 스프링 부트 애플리케이션을 위한 통합 테스트 지원
  • AssertJ : 검증문인 어설션을 작성하는 데 사용되는 라이브러리
  • Hamcrest : 표현식을 이해하기 쉽게 만드는 데 사용되는 Matcher 라이브러리
  • Mockito : 테스트에 사용할 가짜 객체인 목 객체를 쉽게 만들고, 관리하고, 검증할 수 있게 지원하는 테스트 프레임워크
  • JSONassert : JSON용 어설션 라이브러리
  • JsonPath : JSON 데이터에서 특정 데이터를 선택하고 검색하기 위한 라이브러리

이 중에서 JunitAssertJ를 가장 많이 사용한다고 한다.

Junit이란?

자바 언어를 위한 단위 테스트 프레임워크
단위 테스트란, 작성한 코드가 의도대로 작동하는지 작은 단위로 검증하는 것을 의미합니다. 이때 단위는 보통 메서드가 됩니다.

  • Junit의 특징
    • 테스트 방식을 구분할 수 있는 애너테이션을 제공
    • @Test 애너테이션으로 메서드를 호출할 때마다 새 인스턴스를 생성, 독립 테스트 가능
    • 예상 결과를 검증하는 어설션 메서드 제공 · 사용 방법이 단순, 테스트 코드 작성 시간이 적음
    • 자동 실행, 자체 결과를 확인하고 즉각적인 피드백을 제공

사용 방법에 대한 내용은 Junit 공식문서를 참고하기 바란다.

AssertJ란?

Junit과 함께 사용해 검증문의 가독성을 높여주는 라이브러리

  • AssertJ의 특징

    • 기댓값과 비교값이 코드에 명시되어 비교대상의 구분이 잘됨.
  • JunitAssertJ 검증문 비교

    Junit Assertion

    Assertions.assertEquals(sum, a+b);

    AssertJ

    assertThat(a + b).isEqualTo(sum);

0개의 댓글