-
Notifications
You must be signed in to change notification settings - Fork 45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
1단계 - OneToMany (FetchType.EAGER) #114
base: jshans40
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 상혁님!
바쁜 회사 생활 중에도 꾸준히 노력하시는 모습이 멋집니다!
몇가지 코멘트 남겨 놓았어요~
그럼 마지막까지 화이팅입니다~
EntityManager entityManagers = new EntityManagerImpl(entityPersister, entityLoader); | ||
|
||
Order order1 = entityManagers.find(Order.class, 1L); | ||
System.out.println("das"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
무슨 테스트일까요?
@DisplayName
혹은 테스트_메소드_이름
으로 명확히 표현했으면 해요.
검증부가 없는 테스트는 의미가 있는 테스트일까요? 🤔
개발을 진행하다보면 사용하지 않는 코드들이 계속해서 발생합니다.
그런한 것들을 지속적으로 관리해주지 않으면 생각이 점점 복잡해지고 개발하고 있는 사람조차도 길을 잃어버리게 되니 주의해야합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이전보다 난이도가 많이 올라간것 같고 방향성 및 구조를 잘 잡은지 모르겠네요...
우선 생각의 정리가 필요해보입니다.
저는 이럴때,
작은 단위 객체부터 어떤 메시지를 보내고 받기를 원하는지 테스트코드를 통해 대화해봅니다.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
직관적으로 하드코딩하듯히 가장 간단한 절차지향으로 한번 테스트로 구현해보는거죠.
@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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
처음부터 비즈니스 코드로 접근하기 보다는 작은 단위 부터 테스트코드를 작성해보고, 도메인 지식을 쌓아보는 접근을 해보시면 어떨까요?
안녕하세요 ~
최근 회사일이 너무 바빳어서 엄청 늦게 리뷰 요청 드리네요..ㅠㅠ
이전보다 난이도가 많이 올라간것 같고 방향성 및 구조를 잘 잡은지 모르겠네요...
계속 끌고잇으면 너무 늦어질 것 같아 리뷰 요청드립니다! 감사합니다~!