ysk(0soo)
Lifealong
ysk(0soo)
전체 방문자
오늘
어제
  • 분류 전체보기 (238)
    • Java (50)
      • whiteship-java-study (11)
      • Java (28)
      • time (6)
    • Spring (68)
      • JPA (15)
      • Spring (1)
      • SpringBoot (1)
      • SpringMVC (6)
      • Spring Security (22)
      • Jdbc (1)
      • RestDocs (14)
      • log (6)
    • Kotlin (3)
    • Web (2)
      • nginx (1)
    • Database (14)
      • MySQL (5)
      • PostgreSQL (1)
      • SQL (1)
      • Redis (4)
    • C, C++ (0)
    • Git (1)
    • Docker (2)
    • Cloud (3)
      • AWS (3)
    • 도서, 강의 (0)
      • t5 (0)
    • 기타 (7)
      • 프로그래밍 (1)
    • 끄적끄적 (0)
    • CS (14)
      • 운영체제(OS) (2)
      • 자료구조(Data Structure) (9)
    • 하루한개 (12)
      • 우아한 테크코스-10분테코톡 (12)
    • 스터디 (12)
      • 클린 아키텍처- 로버트마틴 (2)
      • JPA 프로그래밍 스터디 (10)
    • 테스트 (34)
      • JUnit (19)
      • nGrinder (2)
      • JMeter (0)
    • Infra (3)
    • 프로그래머스 백엔드 데브코스 3기 (0)
    • 디자인 패턴 (3)
    • Issue (4)
    • system (1)
      • grafana (0)
      • Prometheus (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

공지사항

인기 글

태그

  • UserDetailsService
  • mysql
  • nginx basic auth
  • VirtualThread Springboot
  • AuthenticationException
  • 가상 스레드
  • tree
  • scope value
  • 구조화된 동시성
  • restdocs enum
  • junit5
  • java
  • StructuredConcorrency
  • jpa
  • AccessDecisionManager
  • 가상 스레드 예외 핸들링
  • 동일성
  • 동시성 제어
  • 인가(Authorization) 처리
  • querydsl
  • DataJpaTest
  • 동등성
  • 정규표현식
  • restdocs custom
  • 트랜잭션
  • nGrinder
  • node exporter basic auth
  • AccessDecisionVoter 커스텀
  • FilterSecurityInterceptor
  • LocalDateTime

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ysk(0soo)

Lifealong

카테고리 없음

JUnit5 - Java에서의 단위테스트6 - BDD

2022. 8. 21. 21:56

BDD 스타일 Mockito API

BDD:애플리케이션이 어떻게 “행동”해야하는지에 대한 공통된 이해를 구성하는 방법으로, TDD에서 창안했다.

  • BDD : Behaviour-Driven Development의 약자
  • TDD : Test-Driven Development의 약자

BDD는 시나리오를 기반으로 테스트 케이스를 작성하며 함수 단위 테스트를 권장하지 않는다. 이 시나리오는 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 레벨을 권장한다. 하나의 시나리오는 Given, When, Then 구조를 가지는 것을 기본 패턴으로 권장하며 각 절의 의미는 다음과 같다.

Feature : 테스트에 대상의 기능/책임을 명시한다. Scenario : 테스트 목적에 대한 상황을 설명한다. Given : 시나리오 진행에 필요한 값을 설정한다. When : 시나리오를 진행하는데 필요한 조건을 명시한다. Then : 시나리오를 완료했을 때 보장해야 하는 결과를 명시한다.

테스트 대상은 A 상태에서 출발하며(Given) 어떤 상태 변화를 가했을 때(When) 기대하는 상태로 완료되어야 한다. (Then) 또는 Side Effect가 전혀 없는 테스트 대상이라면 테스트 대상의 환경을 A 상태에 두고(Given) 어떤 행동을 요구했을 때(When) 기대하는 결과를 돌려받아야 한다. (Then)

행동에대한스팩

  • Title
  • Narrative
    • As a / I want / so that
  • Acceptance criteria
    • Given / When / Then

Mockito는 BddMockito라는 클래스를 통해 BDD스타일의 API를제공한다.

Given

  • org.mockito.BDDMockito.given() 메서드
    • 위에서 사용했던 when을 다음과 같이 바꿀 수 있다. when -> given
    • when(memberService.findById(1L))
              .thenReturn(Optional.of(member));
      when(studyRepository.save(study))
              .thenReturn(study)
      //
      given(memberService.findById(1L))
              .willReturn(Optional.of(member));
      given((studyRepository.save(study)))
              .willReturn(study);

Then

  • org.mockito.BDDMockito.then() 메서드
    • 위에서 사용했던 verify를 다음과 같이 바꿀 수 있따. verify -> then
    • verify(memberService, times(1)).notify(study);
      verifyNoMoreInteractions()
      
      then(memberService).should(times(1)).notify(study);
      then(memberService).shouldHaveNoMoreInteractions();

참고

  • https://javadoc.io/static/org.mockito/mockito-core/3.2.0/org/mockito/BDDMockito.html
  • https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#BDD_behavior_verification
  • 인프런 백기선님 강의 더 자바, 애플리케이션을 테스트하는 다양한 방법
  • https://velog.io/@seongwon97/Unit-Test-%EB%8B%A8%EC%9C%84-%ED%85%8C%EC%8A%A4%ED%8A%B8
    ysk(0soo)
    ysk(0soo)
    백엔드 개발을 좋아합니다. java kotlin spring, infra 에 관심이 많습니다. email : kim206gh@naver.com github : https://github.com/devysk

    티스토리툴바