• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

Assertions 메서드 인자 순서

23.08.20 15:41 작성 23.08.22 15:22 수정 조회수 545

2

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
회원 리포지토리 테스트 케이스 작성 강의에서 assertEquals(A, B), assertThat(A).isEqualTo(B)에 대한 질문이 있습니다. 두가지 메서드 모두 A와 B의 순서가 크게 중요하지 않아보이는데 그런가요?

다르다면, 첫번째 메서드는 member를 앞에 넣으시고, 뒤에 메서드는 member1을 뒤에 넣으셨는데, 메서드를 어떻게 해석해야할까요? junit 문서를 찾아보아도 그런 설명이 없네요..

답변 1

답변을 작성해보세요.

1

조경현님의 프로필

조경현

2023.08.20

둘 다 순서가 중요합니다.

Assertions.assertEquals(A, B) 에서

A : expected (기댓값)

B : actual (실제 값)

Assertions.assertThat(A).isEqualTo(B) 에서

A : actual (실제 값)

B : expected (기댓값)

 

즉, 각 메소드별로 A와 B의 의미가 다르기 때문에

영한님께서 강의에 그렇게 내용을 포함하셨을거라 생각합니다.

 

=======================================================

예를 들어, 계산기 프로그램의 add(int, int) 메소드를 테스트한다고 했을 때

Assertions.assertEquals(8, Calc.add(3, 5)) 가 옳은 표현이며, 그 반대인

Assertions.assertEquals(Calc.add(3, 5), 8) 은 부적절한 표현입니다.

만약 add 메소드가 잘못 개발되어 Calc.add(3, 5) -> 5 가 반환된다고 가정해봅시다. 테스트에 실패했을 때, 발생하는 에러메시지를 본다면

전자 : 기댓값이 8이지만, 실제로 5가 나왔어.

후자 : 기댓값이 5이지만, 실제로 8이 나왔어.

와 같은 맥락으로 출력됩니다.

 

Assertions.assertThat 은 isEqualTo 만 놓고보면 A, B의 순서가 중요하지 않아보일 수 있지만,

범위를 테스트하는 코드 예시를 하나 작성해드리겠습니다. 아래 코드 보시면 바로 이해가 가실겁니다.

assertThat(result)
    .isGreaterThan(0)
    .isLessThan(10);

 

nurugji님의 프로필

nurugji

질문자

2023.08.21

actual (실제 값) expected (기댓값) 으로 인해 헷갈린 것 같습니다.

답변 주신 내용을 다시 정리하자면 실제 값은 테스트에 쓰이는 값으로 result가 되며 기대 값은 꼭 나와야 하는 값으로 member가 되는 것 입니다.

따라서 두 가지 메서드에서 인자의 순서는 중요하다 라고 이해해했습니다. 제가 이해한 바가 맞을까요?

 

조경현님의 프로필

조경현

2023.08.21

넵 이해하신게 맞습니다 :)

nurugji님의 프로필

nurugji

질문자

2023.08.22

늦었지만 자세하고 친절한 답변에 감사드립니다. 덕분에 한번에 이해할 수 있었습니다.