한 일
- Todo Rest API 테스트 작성하기! (코드 리뷰)
- '루비로 배우는 객체지향 디자인' 읽고 객체지향 스터디 참여
- 이펙티브자바, TDD by Example, 탤런트 코드 책 읽기
배운 점 & 느낀점
1. 테스트 코드를 작성하는 이유
- 잘 작성된 테스트 코드는 그 자체로 문서 역할을 한다.
- 코드를 수정할 때 수정으로 인한 예상치 못한 버그를 찾을 수 있다.
- 테스트코드가 없다면 개발자가 각각의 유스케이스를 확인해야한다.
- 궁극적인 이유는 잘 작동하는, 깔끔한 코드를 얻기 위해서이다.
2. 테스트 코드를 작성할때 고민해 볼 점
- 테스트 코드는 '다른 개발자가 읽을 명세를 코드의 형태로' 작성하는 사회적 활동이기도 하다. 그래서 내가 보기엔 쉽지만 다른 사람이 보기엔 어렵지 않을까를 고민해봐야한다. - 종립님 -
3. AssertJ (링크)
- Java test를 위해 좀 더 풍부한 문법을 제공하고 메서드 체이닝을 통해 직관적인 테스트 흐름을 작성할 수 있도록 개발된 오픈소스 라이브러리이다.
- junit에서 제공하는 assertEquals에 비해 훨씬 가독성이 좋다.
- 아래는 AssertJ를 이용한 간단한 예시이다.
String name = "Jamie";
assertEquals("Jamie", name);
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());
}
}
}
자기 선언
- 과제를 하며 '왜 테스트를 작성해야 하는지? 테스트로 무엇을 얻을 수 있는지?'에 대해서 컨퍼런스 영상들도 보고 많이 생각해보았다. 가장 와닿았던 테스트의 장점은 '안정감과 자신감' 이였다.
- 이번 주 공부를 하면서 아무 생각 없이 강의를 보고 책을 읽는 나의 모습을 보았다. 그래서 '어떻게 하면 집중할 수 있을지' 찾아보다가 정말 좋은 명언을 발견하였다.
- 무의식을 의식화하지 않으면, 무의식이 우리 삶의 방향을 결정하게 되는데, 우리는 바로 이것을 두고 '운명'이라고 부른다. -칼융-
- 의식적으로 살아간다면 내 무의식이 아닌 내가 운명의 주인이 될 수 있을 것이다.
- 문득문득 내가 모르는 게 많고, 공부해야 할게 많다는 생각을 한다. 항상 결론은 같다. 꾸준히 하나하나 해 나아가는 수밖에!
- 다음 주에는 조금 더 의식적으로 학습해야겠다!