1단계 - OneToMany (FetchType.EAGER) - #114
Conversation
wooobo
left a comment
There was a problem hiding this comment.
안녕하세요 상혁님!
바쁜 회사 생활 중에도 꾸준히 노력하시는 모습이 멋집니다!
몇가지 코멘트 남겨 놓았어요~
그럼 마지막까지 화이팅입니다~
| EntityManager entityManagers = new EntityManagerImpl(entityPersister, entityLoader); | ||
|
|
||
| Order order1 = entityManagers.find(Order.class, 1L); | ||
| System.out.println("das"); |
There was a problem hiding this comment.
무슨 테스트일까요?
@DisplayName 혹은 테스트_메소드_이름 으로 명확히 표현했으면 해요.
검증부가 없는 테스트는 의미가 있는 테스트일까요? 🤔
개발을 진행하다보면 사용하지 않는 코드들이 계속해서 발생합니다.
그런한 것들을 지속적으로 관리해주지 않으면 생각이 점점 복잡해지고 개발하고 있는 사람조차도 길을 잃어버리게 되니 주의해야합니다.
There was a problem hiding this comment.
이전보다 난이도가 많이 올라간것 같고 방향성 및 구조를 잘 잡은지 모르겠네요...
우선 생각의 정리가 필요해보입니다.
저는 이럴때,
작은 단위 객체부터 어떤 메시지를 보내고 받기를 원하는지 테스트코드를 통해 대화해봅니다.
public 메소드의 테스트 코드를 좀 더 늘려보는건 어떨까요?
적절한 테스트 코드가 있으면 어디서 이슈가 발생하는지 찾기 쉽고, 같이 개발하는 동료에게도 로직을 이해하는데 도움이 되지 않을까요?
@Test
@DisplayName("EntityJoin 는 어떤 상태를 가지는 걸까? ........")
void TestEntityJoin() {
Order order = new Order(1L, "orderNumber");
EntityJoin entityJoin = new EntityJoin(order.getClass());
// Order 클래스에 @OneToMany 어노테이션이 있는지 확인
assertTrue(entityJoin.isEntityJoin());
List<EntityJoinInfo> entityJoinInfos = entityJoin.getEntityJoinInfos();
assertThat(entityJoinInfos).hasSize(1);
assertThat(entityJoinInfos.get(0).getJoinClazz()).isEqualTo(OrderItem.class);
assertThat(entityJoinInfos.get(0).getJoinColumnName()).isEqualTo("order_id");
assertThat(entityJoinInfos.get(0).getJoinTableName()).isEqualTo("order_items");
// Order 클래스에 @OneToMany 어노테이션을 가진 필드를 찾아서 join 정보를 저장
String joinQueryString = entityJoin.makeJoinTableQuery();
assertThat(joinQueryString).contains("LEFT JOIN order_items ON orders.id = order_items.order_id");
}There was a problem hiding this comment.
직관적으로 하드코딩하듯히 가장 간단한 절차지향으로 한번 테스트로 구현해보는거죠.
@Test
@DisplayName("Join ResultSet 을 통해 OrderItem 을 조회")
void Testbasdf() throws SQLException {
연관관계_insert();
SelectQuery selectQuery = SelectQuery.getInstance();
String query = selectQuery.findById(Order.class, 1L);
ResultSet rs = jdbcTemplate.query(query);
Order order = null;
while (rs.next()) {
// Order 정보
if (order == null) { // Order는 한 번만 생성
order = new Order();
... blabla codes
}
// OrderItem 정보
OrderItem orderItem = new OrderItem();
... blabla codes
필드에_값_주입(orderItem, "product", rs.getString("order_items.product"));
필드에_값_주입(orderItem, "orderId", order.getId());
// OrderItem 리스트에 추가
List<OrderItem> orderItems = ... blabla codes
orderItems.add(orderItem);
}
assertNotNull(order);
assertThat(order.getOrderItems().size()).isEqualTo(2);
}이런식으로 테스트 코드를 통해 도메인의 대략적인 흐름이 이해가 되었다면, 절적한 위치가 어딜지 생각해보고 적절한 위치가 없다면 객체를 만들어야할까? 고민을 해보는것이죠.
There was a problem hiding this comment.
처음부터 비즈니스 코드로 접근하기 보다는 작은 단위 부터 테스트코드를 작성해보고, 도메인 지식을 쌓아보는 접근을 해보시면 어떨까요?
안녕하세요 ~
최근 회사일이 너무 바빳어서 엄청 늦게 리뷰 요청 드리네요..ㅠㅠ
이전보다 난이도가 많이 올라간것 같고 방향성 및 구조를 잘 잡은지 모르겠네요...
계속 끌고잇으면 너무 늦어질 것 같아 리뷰 요청드립니다! 감사합니다~!