SpringBoot Part2 강의

yeezze·2022년 11월 8일
0

데브코스

목록 보기
6/6

소프트웨어 테스팅

유닛(단위)테스트


가장 작은 단위로 테스트한다 (메모리 DB)

  • 클래스 단위로!! 기능 테스트
  • 테스트 대상 클래스 하나만! (SUT)
  • 의존관계 객체 (협력관계자)들은 테스트 더블로 전달한다 (mock, stub)
  1. 지속적으로 변경되는 어플리케이션에서 안전성을 확보할 수 있다
  2. 테스트 코드가 기능 명세서가 될 수 있다

통합테스트

어플 내 각 클래스간, 외부 서비스간의 연동을 테스트한다 (외부 DB)

JUnit

Java에서 어떻게 테스트를 할까?
가장 많이 사용하는 프레임워크 JUnit!

매 단위 테스트시마다 테스트 클래스의 인스턴스가 생성되어 독립적인 테스트가 가능
JUnit은 컴파일 타임에 JAR로서 링크된다.

JUnit5

  • JUnit Platform : 플랫폼 런처를 통해서 플랫폼 엔진이 구동된다
    플랫폼 엔진의 구현체는 밑에 2개 중 1개 선택!

  • JUnit Jupitor : JUnit5에 새로 추가된 테스트 코드용 API

  • JUnit Vintage : 4 버전으로 실행할때 사용

hamcrest

springboot starter에 기본으로 추가되어 있다

assertj도 있다
https://velog.io/@new_wisdom/assertJ-공식문서와-함께하는-assertJ-정리

assertEquals보다 assertThat이 좀 더 직관적이기 때문에 가급적 assertThat()을 사용하자

Mock Object

Mockito 프레임워크

springboot starter에 포함되어있음

1. Mock

  • 행위 검증 : 메소드 리턴값으로 판단할 수 없는 경우 특정 동작을 수행하는지 확인하는 검증법
  • mock, spy
  • 호출에 대한 기대를 명세한다 (동작이 수행됐는지 여부)
  • ex) 어떠한 메소드가 정상적으로 실행됐는지, 특정 메소드가 몇번 실행됐는지

spy는 개발자가 thenReturn값 설정해주지 않은 메소드는 정상적으로 실행됨
원하는 몇개의 메소드만 mock으로 설정하는 것.
mock 객체로 선언하면 모든 메소드가 mock 메소드가 되는거고

단위테스트의 경우 다른 클래스의 상태에까지는 검증하지 않아도 되니까 mock 객체로 사용해서 메소드 호출 정상 실행 여부만 검증

Mockito inOrder

한 메소드 내에서 의존관계 객체들의 메소드들 호출 순서 여부 검증!!

2. Stub

  • 상태 검증 : 메소드가 수행된 후, 객체의 상태를 확인하여 올바르게 동작했는지를 확인하는 검증법
  • stub, dummy, fake
  • 실제 동작하는거처럼 보이게 만드는 객체
  • 리턴된 값이 실제로 있는거고 올바르게 동작했는지 값을 확인!!!! (원래하던 test)

SpringTest

실제 비즈니스 로직들은 spring 프레임워크와 의존관계가 낮도록 작성하는게 좋다

통합테스트

spring 빈들간의 관계 확인

@ContextConfiguration(classe={configuration class 넣어줘})
별도의 테스트 컨텍스트가 만들어지고 캐시 기능을 활용하여 빈을 불러온다

@ExtendWith(SpringExtension.class)
테스트 컨텍스트가 JUnit 5에서 동작하기 위해서 추가

@SpringJUnitConfig
테스트 컨텍스트 프레임워크가 만들어지고 그 안에 애플이케이션 컨텍스트가 만들어진다

@ActiveProfiles("")
@Profile 어노테이션을 등록한 클래스들 중에서 특정 profile과 관련된 파일들만 빈으로 만들어준다

mock이 아니라 실제 빈들과의 관계를 테스트한 것

profile
백엔드 개발자 😊

0개의 댓글