2023.01.05.THU

ronglong·2023년 1월 5일
0
  1. Mockito
  • Mock : 가짜 객체
  • 가짜 객체를 사용함으로써 다른 계층과 단절시켜, 테스트하려는 계층에만 집중
  • Mockito : Mocking 라이브러리
  • @MockBean : Mock 객체
  • Stubbing 메서드(Stub 데이터 생성) :
    given(메서드(Mockito.any())).willReturn(리턴값);
  • API 계층에서는 Controller의 핸들러 메서드가 요청/응답을 잘 하는지 확인
  • 서비스 계층에서는 비지니스 로직을 테스트
  • 서비스 계층(↓스프링 기능 없이 Mockito 기능만으로 테스트 가능)
    @ExtendWith(MockitoExtension.class), @Mock, @InjectMocks
    보통 레포지토리를 mock으로 만들어서 서비스에 주입함
  • given(메서드(파라미터)).willReturn(Optional.of(파라미터));
  • 테스트하려는 계층에서 어떤 필드를 mock으로 만들어야 하는지 확인
  1. TDD (Test Driven Development)
  • 테스트 주도 개발
  • 선 테스트, 후 구현
  • 다 통과되는 테스트를 만들고, 하나씩 조건을 붙이고 -> 실패하면 -> 구현하고 -> 다시 통과하기를 반복
  • 테스트 / 검증 / 리팩토링 반복해서 조금씩 기능 구현을 완성해나감
  • 오류 찾기 쉽고, 코드 중복을 줄이기 좋음
  1. Mock 실습
  • 오늘도 페어님께서 버스 태워주셨고,, 잘 알려주셔서 정말 감사하다.
    걍 형님으로 모시는 중..ㅋㅋㅋ
    토란 형님께서 잘 알려주셔서, 저녁에 OrderTest 부분은 내가 작성해봤다.👍
    아래의 코드 작성 후에 이렇게 하는 거 맞는지 확인까지 받음★
@ExtendWith(MockitoExtension.class)
public class OrderServiceHomeworkTest {
    @Mock
    private OrderRepository orderRepository;

    @InjectMocks
    private OrderService orderService;

    @Test
    public void cancelOrderTest() {
        Order order = new Order();
        order.setOrderId(1L);
        order.setOrderStatus(Order.OrderStatus.ORDER_COMPLETE);
        given(orderRepository.findById(Mockito.anyLong())).willReturn(Optional.of(order));

        assertThrows(BusinessLogicException.class, ()->orderService.cancelOrder(order.getOrderId()));
    }
}
  1. 기타
  • Stream : 여러 번 탐색 불가능. 병렬 작업 가능
  • JPA : @Embedded, @Embeddable, @AttributeOveride
    https://galid1.tistory.com/592
  • 오전에 프로그래머스 알고리즘 푸는데, 어떤 사람이 비트 연산자 써서 푼 거 봤다. 비트 연산자라는 거 처음봐서 찾아봤는데, 내용 너무 어려워서 이해 못 함ㅋㅋㅋ
    사실 슥- 보고 복잡해보여서 이해하려는 시도도 제대로 안 했지만.. ㅎ
    https://coding-factory.tistory.com/521
    https://chans-note.tistory.com/3
  • Page< Member > pageMembers
    = new PageImpl<>(content, PageRequest.of(page, size), total);
content : 페이지에 들어가는 내용(요소)
page : 요청하는 페이지 넘버
size : 요청 페이지 안에 있는 요소의 수
total : 전체 요소의 수

<느낀 점>
오늘 Mock 개념이 너무 안 와닿아서 엄청 애먹었다.
특히 stubbing 메서드가 너무 생소했음. 리턴값(stub 데이터)은 대체 어디로 가는 것이며...
다른 계층과의 연결을 통해 얻는 데이터들을, 내가 직접 mock을 통해 stub 데이터로 만들어서 준다고 생각하면 되는 것 같긴한데...

doNothing().when(클래스).메서드(Mockito);
-> 아무것도 리턴 안 한다(void).클래스에서.메서드에 mock을 넣고 호출할 때.

컴퓨터 '언어'라고 하는 이유를 체감했음^^

2월 10일에 섹션4까지 종료되면 그 이후부터는 프로젝트만 한다.
디데이 세고 있는데, 37일 남음;; 주말이랑 설날 빼면 24일정도 남았다.
24일동안 지식을 뇌 속에 욱여넣고 프로젝트 ㄱㄱ..
대충 어떨지 불 보듯 뻔하지만... ㅋㅋㅋㅋㅋㅋㅋㅋ큐ㅠㅠㅠ
존버다 존버.
쉬바,, 칼을 뽑았으면 무라도 썰어야지...
화이팅.

0개의 댓글