내일배움캠프 Spring 40일차 TIL

Skadi·2024년 2월 20일
0

스프링 심화

1. Given - When - Then

  • Given-When-Then 패턴은 Test Code 스타일을 표현하는 방식을 뜻합니다.
    - Given : 테스트 하고자하는 대상을 실제로 실행하기 전에 테스트에 필요한 값(상태)을 미리 선언
    - When : 테스트 하고자하는 대상을 실제로 실행 시킵니다.
    - Then : 어떤 특정한 행동 (테스트 대상 실행)때문에 발생할거라고 예상되는 결과에 대해 예측하고 맞는지 확인합니다.

2. Mockito란 무엇일까?

  • Service에서 메서드를 실행시킬려면 Service 객체를 생성할 때 생성자로 Repository를 전달해줘야 한다. 하지만 인터페이스로 되어있는 Repository를 어떻게 전달할 것이며 repository의 내부 코드는 어떻게 처리하는지에 대한 의문을 가질 수 있다.

Mock object (가짜 객체)

  • 이상적으로, 각 테스트 케이스는 서로 분리되어야 한다. 이를 위해 가짜 객체(Mock object)를 생성하는 도 좋은 방법이다.

  • Controller 클래스만 테스트할 수 없을까?
    - 테스트 범위 : Controller, Service, Repository

  • Service 클래스만 테스트할 수 없을까?
    - 테스트 범위 : Service, Repository

  • Repository 클래스만 테스트할 수 없을까?
    - 테스트 범위 : Repository

  • 가짜 객체로 분리한다.
    - MockRepository

    • 실제 객체과 겉만 같은 객체입니다.
      • 동일한 클래스명, 함수명
    • 실제 DB 작업은 하지 않습니다.
      • DB작업이 이루어지는 것처럼
        • 테스트를 위해 필요한 결과값을 return
    • 이것을 간단히 mock이라고 부르기로 함

3. 개인과제 진행

요약

  • dto, entity, service, controller, repository 순으로 테스트 코드 작성하시오.

진행사항

  • dto, entity 및 service 일부 진행

알아가는 점

  • given을 통한 테스트코드 작성중인데 for문이 있는 경우 여러번 given이 들어가 덮어씌우기가 되어 정상적인 테스트가 불가하다.
  • 꼭 테스트코드에서 객체에 데이터를 넣어 결과를 확인하고 싶다면 ReflectionTestUtils을 사용해보자. (Entity에서 @GeneratedValue(strategy = GenerationType.IDENTITY)일 경우 DB에 접근하지 않으면 id값을 자동생성 할 수 없다 이런 부분을 해결 가능)
  • 모든 코드에 테스트 코드를 작성할 필요는 없다. (단순한 조회에서 끝나는 경우는 테스트를 진행하지 않거나 repository와 관련된 부분을 테스트한다.)

0개의 댓글