회고
Facts(사실, 객관)
- 코드 리뷰 피드백 반영
- "/products/{id}" put patch 처리 코드 구현
- "/products/{id}" delete 처리 코드 구현
Feelings(느낌, 주관)
- 클래스의 메서드 목록을 가져와 실행시키는 방법은 너무 코드가 복잡하다.
- 앞으로는 간단한 코드를 작성해야겠다.
Findings(배운 점)
- 클래스의 메서드 목록을 가져와 실행시키는 방법
- void 메서드 mocking 방법
Affirmation(자기 선언)
- 나는 각각의 클래스의 책임을 고려하여 코드를 작성하는 사람이다.
04:20 ~ 05:54
Facts(사실, 객관)
Feelings(느낌, 주관)
@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(배운 점)
@BeforeEach
void setUp() {
doThrow(new ProductNotFoundException(ID))
.when(productService).deleteProduct(anyLong());
}
Affirmation(자기 선언)
- 나는 각각의 클래스의 책임을 고려하여 코드를 작성하는 사람이다.