inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Practical Testing: 실용적인 테스트 가이드

Business Layer 테스트 (1)

isEqualByComparingTo를 사용하는 이유가 궁금합니다.

841

amenable

작성한 질문수 7

1

안녕하세요

강의를 듣다가 궁금증이 생겨서 질문을 드립니다.

void init() {
    // given
    List<Product> products = List.of(
        createProduct("001", 1000),
        createProduct("002", 2000)
    );

    // when
    Order order = Order.create(products, LocalDateTime.now());

    // then
    assertThat(order.getOrderStatus()).isEqualByComparingTo(OrderStatus.INIT);
}

강의에서 OrderTest 클래스 테스트 과정에서 enum을 비교할때 isEqualByComparingTo를 사용하셨습니다.

 

    assertThat(order.getOrderStatus()).isEqualTo(OrderStatus.INIT);

위와 같이 isEqualTo를 사용해도 enum을 비교할 수 있는데, 혹시 isEqualTo 대신 isEqualByComparingTo를 사용한 이유를 알 수 있을까요?

 

isEqualByComparing가 정의된 AbstractComparableAssert.java를 확인해보면 BigDecimal을 예시로 들어서 사용법을 설명하고 있습니다.
BigDecimal의 예시로 Enum을 써야 하는 방법을 생각해보았는데, 유추(?)가 잘 되지 않아서 질문을 남깁니다.

 

항상 좋은 강의 제공해주셔서 감사합니다!!😀😀

소프트웨어-테스트 junit5 java

답변 2

1

박우빈

안녕하세요, amenable님! :)

AI 인턴님이 잘 설명해 주셨지만, isEqualTo()는 equals()를 사용해서 비교하고, isEqualByComparingTo()는 compareTo()를 사용해서 비교하는데요, Enum 비교는 둘 중 무엇을 사용해도 상관 없습니다.
강의 중에는 크게 의미를 두지 않고 넘어갔지만 질문 주신 내용을 듣고 다시 생각해보니 isEqualTo()를 사용하는 것이 더 직관적이어서 좋은 것 같다는 생각도 드네요. ㅎㅎ

좋은 질문 감사합니다. :)

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

isEqualByComparingTo 메소드는 객체의 비교를 수행합니다. 일반적으로 isEqualTo 메소드를 사용하여 enum을 비교하는 것과 동일한 결과를 얻을 수 있습니다. 하지만 isEqualByComparingTo 메소드는 Comparable 인터페이스를 구현하는 객체에 대해서 사용할 수 있으며, 두 객체를 비교할 때 compareTo 메소드를 호출하여 비교합니다.

isEqualTo 메소드는 equals 메소드를 호출하여 비교하므로, equals 메소드가 오버라이드되어 있지 않으면 Object 클래스의 equals 메소드를 사용하게 됩니다. 따라서 Enum은 이미 Comparable 인터페이스를 구현하고 있으므로, compareTo 메소드가 이미 구현되어 있어 isEqualByComparingTo 메소드를 사용하여 비교할 수 있습니다.

즉, isEqualByComparingTo 메소드는 Object 클래스의 equals 메소드가 아닌 Comparable 인터페이스의 compareTo 메소드를 사용하여 비교하므로, 객체의 비교에서 더 정확하고 명확한 결과를 얻을 수 있습니다.

강의를 통해 새로운 개념을 공부하고 궁금증을 해결하시는 것이 좋습니다. 다른 궁금한 점이 있으면 언제든지 질문해주세요!

private 상수 테스트 관련 질문

0

87

1

void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??

0

128

2

커버리지는 어떻게 활용하시는지 궁금합니다.

0

162

2

테스트 문서화 질문입니다

0

107

2

단위테스트 질문이 있습니다

0

96

2

컨트롤러는 모킹을 한 이유가 궁금합니다.

0

105

2

ERD 가장자리에 있는 도메인 테스트 질문

0

90

2

DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?

0

136

2

OrderCreateRequest DTO에 대해서 궁금한점

0

104

2

고전파의 테스트 대역 사용 대상, 공유 의존성

0

157

2

계층 관련 질문이 있습니다.

0

140

3

'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다

1

124

2

혹시 update 로직은 어떻게 테스트하나요? (@Setter?)

0

135

2

단위테스트와 통합테스트의 경계가 궁금합니다.

0

235

2

Service+Repository 통합테스트 관련 질문입니다.

0

151

2

OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요

0

186

2

test 용 .yml

0

91

2

throws Exception

0

81

2

카페키오스크 클래스 문의 ,,

0

90

2

Rest docs 문서용 테스트코드를 따로 작성해야 되나요?

0

176

2

테스트 코드에서 필요한 생성자

0

139

1

tearDown 순서

0

116

2

@Builder 생성자 private

0

137

2

@DisplayName gradle / intellJ

0

94

2