코드숨 스프링 3주차 회고

종명·2021년 2월 7일
0
post-thumbnail

한 일

  • Todo Rest API 테스트 작성하기! (코드 리뷰)
  • '루비로 배우는 객체지향 디자인' 읽고 객체지향 스터디 참여
  • 이펙티브자바, TDD by Example, 탤런트 코드 책 읽기

배운 점 & 느낀점

1. 테스트 코드를 작성하는 이유

  • 잘 작성된 테스트 코드는 그 자체로 문서 역할을 한다.
  • 코드를 수정할 때 수정으로 인한 예상치 못한 버그를 찾을 수 있다.
  • 테스트코드가 없다면 개발자가 각각의 유스케이스를 확인해야한다.
  • 궁극적인 이유는 잘 작동하는, 깔끔한 코드를 얻기 위해서이다.

2. 테스트 코드를 작성할때 고민해 볼 점

  • 테스트 코드는 '다른 개발자가 읽을 명세를 코드의 형태로' 작성하는 사회적 활동이기도 하다. 그래서 내가 보기엔 쉽지만 다른 사람이 보기엔 어렵지 않을까를 고민해봐야한다. - 종립님 -

3. AssertJ (링크)

  • Java test를 위해 좀 더 풍부한 문법을 제공하고 메서드 체이닝을 통해 직관적인 테스트 흐름을 작성할 수 있도록 개발된 오픈소스 라이브러리이다.
  • junit에서 제공하는 assertEquals에 비해 훨씬 가독성이 좋다.
  • 아래는 AssertJ를 이용한 간단한 예시이다.
String name = "Jamie";

assertEquals("Jamie", name);

// 주어진 name이라는 변수는 "Jamie"와 일치한다.
assertThat(name).isEqualTo("Jamie");

// 다음과 같이 메소드 체이닝 형식으로 작성할 수 있다.
assertThat(name).contains("J").doesNotContain("b").endsWith("e")

4. Mockito를 이용해 가짜 객체를 만들어 테스트하는 법

  • Mock 이란 실제 객체를 만들어 사용하기에 시간, 비용 등의 Cost가 높거나 혹은 객체 서로간의 의존성이 강해 구현하기 힘들 경우 가짜 객체를 만들어 사용하는 방법이다.
  • Mockito는 Mock객체를 쉽게 만들고 이용하도록 도와주는 프레임 워크이다.
  • 아래를 TaskService 클래스를 모킹하여 작성한 테스트 코드의 예시이다.
    @MockBean
    private TaskService taskService;
    
    @Nested
    @DisplayName("POST 요청은")
    class Describe_POST {
        @Nested
        @DisplayName("할 일이 주어진다면")
        class Context_with_task {
            @BeforeEach
            void setUp() {
                given(taskService.createTask(any(Task.class)))
                        .willReturn(task);
            }

            @Test
            @DisplayName("생성된 할 일과 상태코드 201 Created 를 응답한다")
            void it_responds_the_created_task_and_status_code_201() throws Exception {
                mockMvc.perform(post("/tasks")
                        .contentType(MediaType.APPLICATION_JSON)
                        .accept(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(task)))
                        .andExpect(jsonPath("id").exists())
                        .andExpect(jsonPath("title").exists())
                        .andExpect(status().isCreated());
            }
        }
    }

자기 선언

  • 과제를 하며 '왜 테스트를 작성해야 하는지? 테스트로 무엇을 얻을 수 있는지?'에 대해서 컨퍼런스 영상들도 보고 많이 생각해보았다. 가장 와닿았던 테스트의 장점은 '안정감과 자신감' 이였다.
  • 이번 주 공부를 하면서 아무 생각 없이 강의를 보고 책을 읽는 나의 모습을 보았다. 그래서 '어떻게 하면 집중할 수 있을지' 찾아보다가 정말 좋은 명언을 발견하였다.
  • 무의식을 의식화하지 않으면, 무의식이 우리 삶의 방향을 결정하게 되는데, 우리는 바로 이것을 두고 '운명'이라고 부른다. -칼융-
  • 의식적으로 살아간다면 내 무의식이 아닌 내가 운명의 주인이 될 수 있을 것이다.
  • 문득문득 내가 모르는 게 많고, 공부해야 할게 많다는 생각을 한다. 항상 결론은 같다. 꾸준히 하나하나 해 나아가는 수밖에!
  • 다음 주에는 조금 더 의식적으로 학습해야겠다!

0개의 댓글