2021년 9월 3일

김대웅·2021년 9월 2일

TIL

목록 보기
18/33

회고

Facts(사실, 객관)

  • 코드 리뷰 피드백 반영
  • "/products/{id}" put patch 처리 코드 구현
  • "/products/{id}" delete 처리 코드 구현

Feelings(느낌, 주관)

  • 클래스의 메서드 목록을 가져와 실행시키는 방법은 너무 코드가 복잡하다.
  • 앞으로는 간단한 코드를 작성해야겠다.

Findings(배운 점)

  • 클래스의 메서드 목록을 가져와 실행시키는 방법
  • void 메서드 mocking 방법

Affirmation(자기 선언)

  • 나는 각각의 클래스의 책임을 고려하여 코드를 작성하는 사람이다.

04:20 ~ 05:54

Facts(사실, 객관)

  • 코드 리뷰 피드백 반영

Feelings(느낌, 주관)

/**
  * Product 리소스 데이터베이스 처리를 담당한다.
  */
 @Repository
 public interface ProductRepository extends CrudRepository<Product, Long> {
     List<Product> findAll();
}
  • Repository는 저장소라는 의미를 가지고 있다.
  • ProductRepository는 Product 저장소라는 의미를 가진다
  • 말하자면 데이터베이스 그 자체를 의미한다고 볼 수 있다.
  • "Product 리소스 데이터베이스 처리를 담당한다." 어색하다
    • = "데이터베이스는 데이터베이스 처리를 담당한다."
  • 검색을 통한 단편적인 지식 습득때문에 발생한 문제가 아닌가 생각한다.
  • 체계적으로 정리된 지식의 습득이 필요하다.

Findings(배운 점)

  • 체계적으로 정리된 지식의 습득이 필요하다.

Affirmation(자기 선언)

  • 나는 개발 도서를 읽는것을 즐기는 사람이다.

06:24 ~ 07:30

Facts(사실, 객관)

  • "/products/{id}" put patch 처리 코드 구현

Feelings(느낌, 주관)

@Test
@DisplayName("id를 제외한 모든 멤버변수를 업데이트 한다.")
void it_updates_all_member_variables() {
    final Method[] methods = Product.class.getMethods();
    final Product product = new Product(TITLE);
    final Product source = new Product("updated" + TITLE);
    final Product updatedProduct = product.update(source);
    assertThat(product.getId()).isNull();
    Arrays.stream(methods)
    .filter(method -> method.getName().indexOf("get") != -1)
    .filter(method -> !method.getName().equals("getClass"))
    .filter(method -> !method.getName().equals("getId"))
    .forEach(method -> {
        try {
            assertThat(method.invoke(updatedProduct)).isEqualTo(method.invoke(source));
        } catch (Exception e) {
            e.printStackTrace();
        }
    });
}
  • Product 개체의 id를 제외한 모든 멤버변수를 업데이트하는 메서드 테스트 코드이다.
  • id를 제외한 멤버변수는 title(String)하나 뿐이다.
  • 앞으로 name, maker, price, imageUrl이 추가되고, title 멤버변수가 삭제될 예정이다.
  • 따라서 멤버변수의 변경과 상관없이 테스트 할 수 있는 코드를 작성하였다.
  • 유연한 코드를 작성함으로 인해 잃는 코드의 가독성에 대해 고민중이다.

Findings(배운 점)

  • 클래스의 메서드 목록을 가져와 실행시키는 방법

Affirmation(자기 선언)

  • 나는 모든 면을 고려하는 사람이다.

18:01 ~ 18:55

Facts(사실, 객관)

  • "/products/{id}" delete 처리 메서드 구현

Feelings(느낌, 주관)

  • 이제는 테스트 코드 작성에 익숙해졌다.
  • 테스트를 작성하면서, 클래스의 책임에 감이 오는것 같다.

Findings(배운 점)

  • void 메서드 mocking 방법
 @BeforeEach
 void setUp() {
 	doThrow(new ProductNotFoundException(ID))
    		.when(productService).deleteProduct(anyLong());
 }

Affirmation(자기 선언)

  • 나는 각각의 클래스의 책임을 고려하여 코드를 작성하는 사람이다.
profile
42seoul cadet

0개의 댓글