해결된 질문
작성
·
402
0
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!
먼저 유사한 질문이 있었는지 검색해 보세요.
서로 예의를 지키며 존중하는 문화를 만들어가요.
강의 잘듣고 있습니다. persistenceLayer 계층 테스트에서 repository 를 테스트할때 Optional<Entity> 형태로 반환하는 함수를 테스트한다고 할때 어떤식으로 테스트를 작성해주어야 되나요? 예를 들어 특정 id를 가진 멤버를 조회한다고 하면 반환값이 Optional<Member>가 될텐데 무조건 찾는 테스트를 한다면 그냥 get()을 붙여서 Optional이 아닌 객체로 꺼내도 되나요?
답변 2
3
안녕하세요, 김은경 님! :)
네, 테스트의 경우 특정 상황을 가정하고 검증하는 것이니 말씀하신대로 검증하면 될 것 같습니다.
저의 경우 다음과 같이 검증합니다.
결과로 나온 Optional<Member>
가 비어있지 않은지 검증
assertThat()에서 isEmpty()
, isPresent()
와 같은 검증 메서드를 제공합니다.
Member를 get()으로 꺼내서 필요한 필드 검증
이런 식으로 체이닝해서 검증하실 수 있습니다.
assertThat(optionalResult)
.isPresent()
.get()
.extracting("field1", "field2")
.contains(
"expected1", "expected2"
);
감사합니다. :)
0
안녕하세요, 인프런 AI 인턴입니다.
Optional<Entity>
로 반환하는 함수를 테스트할 때, 베스트 프랙티스는 반환 값의 존재 여부를 확인하고 get()
을 호출하기 전에 Optional
이 값을 갖고 있는지 여부를 먼저 검증하는 것입니다. 이를 위해 Optional
이 제공하는 isPresent()
메소드를 사용하여 값이 존재하는지 확인한 후, 값이 있을 때만 get()
을 통해 값을 추출할 수 있습니다. 테스트 시나리오에 따라 값이 반드시 존재하는 상황에서는 get()
을 호출하기 전에 isPresent()
점검 없이 바로 값을 꺼내 사용할 수도 있지만, 이는 테스트 환경에서 미리 데이터를 세팅해둔 경우에만 권장되는 방식입니다.
또한 Optional
이 비어 있는 경우를 테스트해야 할 때는 isEmpty()
또는 isPresent()
를 사용하여 Optional
이 비어 있는지를 확인할 수 있습니다. 그리고 orElse()
나 orElseThrow()
같은 대체 메소드를 사용하여 Optional
이 비어있을 때의 동작도 테스트할 수 있습니다.
Optional
을 사용하는 경우에는 가급적이면 get()
을 직접 호출하기보다는 Optional
의 메소드를 활용하여 보다 안전하고 의도를 명확히 드러내는 테스트 코드를 작성하는 것을 추천드립니다.